12345678910111213141516171819202122232425262728 |
- def DrawDFSPath(G, dfs_stk):
- pos = nx.spring_layout(G)
- nx.draw(G, pos, with_labels = True) #with_labels=true is to show the node number in the output graph
- edge_labels = dict([((u,v,), d['length']) for u, v, d in G.edges(data = True)])
- nx.draw_networkx_edge_labels(G, pos, edge_labels = edge_labels, label_pos = 0.3, font_size = 11) #prints weight on all the edges
- for i in dfs_stk:
- #if there is more than one node in the dfs-forest, then print the corresponding edges
- if len(i) > 1:
- for j in i[ :(len(i)-1)]:
- if i[i.index(j)+1] in G[j]:
- nx.draw_networkx_edges(G, pos, edgelist = [(j,i[i.index(j)+1])], width = 2.5, alpha = 0.6, edge_color = 'r')
- else:
- #if in case the path was reversed because all the possible neighbours were visited, we need to find the adj node to it.
- for k in i[1::-1]:
- if k in G[j]:
- nx.draw_networkx_edges(G, pos, edgelist = [(j,k)], width = 2.5, alpha = 0.6, edge_color = 'r')
- break
- #main function
- if __name__ == "__main__":
- G, source = CreateGraph()
- dfs_stk = DFS(G, source)
- DrawDFSPath(G, dfs_stk)
- plt.show()
|