مشکل در اجرای کد ماکرو دیجسترا در اکسل

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • E!LiA
    • 2017/08/27
    • 4

    مشکل در اجرای کد ماکرو دیجسترا در اکسل

    سلام و وقت بخیر
    من یه کد آماده از سایت rosettacode.org/wiki/User:Klever#Dijkstra_algorithm دارم که نمیتونم توی اکسل اجراش کنم؛کسی میتونه کمکم کنه که چرا اجرا نمیشه؟
    هیچ خطایی هم نمیده ولی خروجی هم نداره :|
    ممنون

    کد:
    'Dijkstra globals
    Const MaxGraph As Integer = 100 'max. number of nodes in graph
    Const Infinity = 1E+308
    Dim E(1 To MaxGraph, 1 To MaxGraph) As Double  'the edge costs (Infinity if no edge)
    Dim A(1 To MaxGraph) As Double                 'the distances calculated
    Dim P(1 To MaxGraph) As Integer                'the previous/path array
    Dim Q(1 To MaxGraph) As Boolean                'the queue
      
    Public Sub Dijkstra(n, start)
      'simple implementation of Dijkstra's algorithm
      'n = number of nodes in graph
      'start = index of start node
      'init distances A
        For j = 1 To n
          A(j) = Infinity
        Next j
        A(start) = 0
      'init P (path) to "no paths" and Q = set of all nodes
      For j = 1 To n
        Q(j) = True
        P(j) = 0
      Next j
     
      Do While True 'loop will exit! (see below)
      'find node u in Q with smallest distance to start
        dist = Infinity
        For i = 1 To n
          If Q(i) Then
            If A(i) < dist Then
              dist = A(i)
              u = i
            End If
          End If
        Next i
        If dist = Infinity Then Exit Do 'no more nodes available - done!
        'remove u from Q
        Q(u) = False
        'loop over neighbors of u that are in Q
        For j = 1 To n
          If Q(j) And E(u, j) <> Infinity Then
            'check if path to neighbor j via u is shorter than current estimated distance to j
            alt = A(u) + E(u, j)
            If alt < A(j) Then
              'yes, replace with new distance and remember "previous" hop on the path
              A(j) = alt
              P(j) = u
            End If
          End If
        Next j
      Loop
    End Sub
     
    Public Function GetPath(source, target) As String
     'reconstruct shortest path from source to target
     'by working backwards from target using the P(revious) array
     Dim path As String
     If P(target) = 0 Then
       GetPath = "No path"
     Else
       path = ""
       u = target
       Do While P(u) > 0
         path = Format$(u) & " " & path
         u = P(u)
       Loop
       GetPath = Format$(source) & " " & path
     End If
    End Function
     
     
    Public Sub DijkstraTest()
    'main function to solve Dijkstra's algorithm and return shortest path between
    'a node and every other node in a digraph
     
    ' define problem:
    ' number of nodes
    n = 5
    ' reset connection/cost per edge
    For i = 1 To n
      For j = 1 To n
        E(i, j) = Infinity
      Next j
      P(i) = 0
    Next i
    ' fill in the edge costs
    E(1, 2) = 10
    E(1, 3) = 50
    E(1, 4) = 65
    E(2, 3) = 30
    E(2, 5) = 4
    E(3, 4) = 20
    E(3, 5) = 44
    E(4, 2) = 70
    E(4, 5) = 23
    E(5, 1) = 6
     
    'Solve it for every node
    
    For v = 1 To n
      Dijkstra n, v
      'Print solution
      Debug.Print "From", "To", "Cost", "Path"
      For j = 1 To n
        If v <> j Then Debug.Print v, j, IIf(A(j) = Infinity, "---", A(j)), GetPath(v, j)
      Next j
      Debug.Print
    Next v
    End Sub
  • mokaram
    مدير تالار اکسل و بانک اطلاعاتی

    • 2011/02/06
    • 1805
    • 74.00

    #2
    شما هدف و خواستتون از اجرای این کد چیه ؟

    می خواید چه کاری را انجام بده براتون ؟یا صرفا کنجکاوید بدونید خروجی این کدها چیه؟
    [CENTER][IMG]http://forum.exceliran.com/signaturepics/sigpic909_10.gif[/IMG]
    [/CENTER]

    کامنت

    • E!LiA
      • 2017/08/27
      • 4

      #3
      نوشته اصلی توسط mokaram
      شما هدف و خواستتون از اجرای این کد چیه ؟

      می خواید چه کاری را انجام بده براتون ؟یا صرفا کنجکاوید بدونید خروجی این کدها چیه؟
      اگر اون لینک رو دیده باشید یه خروجی نشون داده؛میخوام اون خروجی رو توی اکسل نمایش بده.و در مراحل بعدی امکان دریافت ورودی هم داشته باشه.
      در کل میخوام الگوریتم دیجسترا رو اجرا کنم.یسری ورودی به فرمت گراف دریافت کنه و الگوریتم رو روش اجرا کنه.
      جهت کنجکاوی نیست؛برای درسم لام دارم

      ممنون

      کامنت

      • Amir Ghasemiyan

        • 2013/09/20
        • 4598
        • 100.00

        #4
        نوشته اصلی توسط E!LiA
        اگر اون لینک رو دیده باشید یه خروجی نشون داده؛میخوام اون خروجی رو توی اکسل نمایش بده.و در مراحل بعدی امکان دریافت ورودی هم داشته باشه.
        در کل میخوام الگوریتم دیجسترا رو اجرا کنم.یسری ورودی به فرمت گراف دریافت کنه و الگوریتم رو روش اجرا کنه.
        جهت کنجکاوی نیست؛برای درسم لام دارم

        ممنون

        سلام
        دوست عزیز این کد خروجی در اکسل نداره. در خط ۱۰۲ و ۱۰۴ این کد اگر دقت کنید نوشته Debug.Print و این بدین معنی هست که در پنجره Immediate خروجی رو نشون میده. برای دیدن خروجی این برنامه در محیط ویژوال بیسیک کلید ترکیبی Ctrl+G رو فشار بدید تا پنجره Immediate نمایش داده بشه. بعد کدتون رو اجرا کنید

        کامنت

        • E!LiA
          • 2017/08/27
          • 4

          #5
          نوشته اصلی توسط Amir Ghasemiyan

          سلام
          دوست عزیز این کد خروجی در اکسل نداره. در خط ۱۰۲ و ۱۰۴ این کد اگر دقت کنید نوشته Debug.Print و این بدین معنی هست که در پنجره Immediate خروجی رو نشون میده. برای دیدن خروجی این برنامه در محیط ویژوال بیسیک کلید ترکیبی Ctrl+G رو فشار بدید تا پنجره Immediate نمایش داده بشه. بعد کدتون رو اجرا کنید
          بسیار ممنون.
          راهی هست که بشه توی اکسل پیادش کرد؟و ازش خروجی گرفت؟

          کامنت

          چند لحظه..