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
def main(*argv): "Demostration program number 10." print Demo10.main.__doc__ GraphAsMatrix.main([]) DigraphAsMatrix.main([]) GraphAsLists.main([]) DigraphAsLists.main([]) return 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