algorithm - Bellman-Ford: all shortest paths -
i've implemented bellman-ford find distance of shortest path when edges have negative weights/distances. i've not been able return shortest paths (when there ties shortest). managed shortest paths (between given pair of nodes) dijkstra. possible bellman-ford? (just want know if i'm wasting time trying)
if alter second step of bellman-ford algorithm little bit can achieve similar:
for 1 size(vertices)-1: each edge uv in edges: // uv edge u v u := uv.source v := uv.destination if u.distance + uv.weight < v.distance: v.distance := u.distance + uv.weight v.predecessor[] := u else if u.distance + uv.weight == v.distance: if u not in v.predecessor: v.predecessor += u
where v.predecessor
list of vertices. if new distance of v
equals path isn't included yet include new predecessor.
in order print shortest paths use like
procedure printpaths(vertex current, vertex start, list used, string path): if current == start: print start.id + " -> " + path else: each edge ve in current.predecessors: if ve.start not in used: printpaths(ve.start,start, used + ve.start, ve.start.id + " -> " + path)
use printpaths(stop,start,stop,stop.id)
in order print paths.
note: possible exclude if u not in v.predecessor v.predecessor += u
modified algorithm if remove duplicate elements after algorithm has finished.
Comments
Post a Comment