示例#1
0
 def FloydsAlgorithm(g):
     """
     (Digraph) -> DigraphAsMatrix
     Floyd's algorithm to solve the all-pairs, shortest path problem
     for the given edge-weighted, directed graph.
     """
     n = g.numberOfVertices
     distance = DenseMatrix(n, n)
     for v in xrange(n):
         for w in xrange(n):
             distance[v, w] = sys.maxint
     for e in g.edges:
         distance[e.v0.number, e.v1.number] = e.weight
     for i in xrange(n):
         for v in xrange(n):
             for w in xrange(n):
                 if distance[v, i] != sys.maxint and \
                     distance[i, w] != sys.maxint:
                     d = distance[v, i] + distance[i, w]
                     if distance[v, w] > d:
                         distance[v, w] = d
     result = DigraphAsMatrix(n)
     for v in xrange(n):
         result.addVertex(v)
     for v in xrange(n):
         for w in xrange(n):
             if distance[v, w] != sys.maxint:
                 result.addEdge(v, w, distance[v, w])
     return result
示例#2
0
文件: demo10.py 项目: RDWang/python
 def main(*argv):
     "Demostration program number 10."
     print Demo10.main.__doc__
     GraphAsMatrix.main([])
     DigraphAsMatrix.main([])
     GraphAsLists.main([])
     DigraphAsLists.main([])
     return 0
示例#3
0
 def FloydsAlgorithm(g):
     """
     (Digraph) -> DigraphAsMatrix
     Floyd's algorithm to solve the all-pairs, shortest path problem
     for the given edge-weighted, directed graph.
     """
     n = g.numberOfVertices
     distance = DenseMatrix(n, n)
     for v in range(n):
         for w in range(n):
             distance[v, w] = sys.maxsize
     for e in g.edges:
         distance[e.v0.number, e.v1.number] = e.weight
     for i in range(n):
         for v in range(n):
             for w in range(n):
                 if distance[v, i] != sys.maxsize and \
                     distance[i, w] != sys.maxsize:
                     d = distance[v, i] + distance[i, w]
                     if distance[v, w] > d:
                         distance[v, w] = d
     result = DigraphAsMatrix(n)
     for v in range(n):
         result.addVertex(v)
     for v in range(n):
         for w in range(n):
             if distance[v, w] != sys.maxsize:
                 result.addEdge(v, w, distance[v, w])
     return result