class Node:
def __init__( self, info = None, prev_node = None ):
self.info = info
self.prev_node = prev_node
def __repr__( self ):
if self.prev_node is None:
return "[" + self.info + ", " + "nil" + "]"
else:
return "[" + self.info + ", " + self.prev_node.info + "]"
def __eq__( self, other ):
return self.info == other.info
def dfs(graph, prev = None,vertex_info = None, queue=[]):
new_state = Node( vertex_info, prev )
queue.append( new_state )
for i in graph[vertex_info]:
if Node(i, None) not in queue:
queue=dfs(graph, new_state ,i,queue)
return queue
G={"A":{"B","D"},
"B":{"C","E"},
"C":{"E","F"},
"D":{"G"},
"E":{"D","F","G","H"},
"F":{"H"},
"G":{"H"},
"H":{}}
queue = (dfs(G, None,"A",))
print(queue)
def show_path( queue ):
for index, item in enumerate( queue ):
if index != 0:
temp_node = queue[index - 1]
if queue[index].prev_node.info != temp_node.info:
while temp_node.info != queue[index].prev_node.info:
temp_node = temp_node.prev_node
print( "-->", temp_node.info )
print( item.info )
else:
print( item.info )
show_path( queue )