All source code available on github
#DA_BFS.py
from collections import deque
class BFS:
def __init__(self, node,edges, source):
self.node = node
self.edges = edges
self.source = source
self.color=['W' for i in range(0,node)] # W for White
self.graph =color=[[False for i in range(0,node)] for j in range(0,node)]
self.queue = deque()
self.parent =[-1 for u in range(0,node)]
# Start BFS algorithm
self.construct_graph()
self.bfs_traversal()
def construct_graph(self):
for u,v in self.edges:
self.graph[u][v], self.graph[v][u] = True, True
def bfs_traversal(self):
self.queue.append(self.source)
self.color[self.source] = 'B' # B for Black
while len(self.queue):
u = self.queue.popleft()
for v in range(0,self.node):
if self.graph[u][v] == True and self.color[v]=='W':
self.color[v]='B'
self.queue.append(v)
self.parent[v]=u
def print_shortest_path(self, destination):
if destination==self.source:
print destination,
elif self.parent[destination] == -1:
print "No Path"
else:
self.print_shortest_path(self.parent[destination])
print "-> ",destination,
node = 8 # 8 nodes from 0 to 7
edges =[(0,1),(0,3),(1,2),(1,5),(2,7),(3,4),(3,6),(4,5),(5,7)] # bi-directional edge
source = 0 # set fist node (0) as source
bfs = BFS(node,edges,source)
bfs.print_shortest_path(5) # shortest path from 0 to 5
print
bfs.print_shortest_path(7) # shortest path from 0 to 7
Output:
0 -> 1 -> 5 0 -> 1 -> 2 -> 7

0 comments:
Post a Comment