graph = { 'A' : [ 'B' , 'C' , 'D' ] ,
'B' : [ 'E' ] ,
'C' : [ 'D' , 'F' ] ,
'D' : [ 'B' , 'E' , 'G' ] ,
'E' : [ ] ,
'F' : [ 'D' , 'G' ] ,
'G' : [ 'E' ] }
import networkx as nx
import numpy as np
import matplotlib. pyplot as plt
G = nx. DiGraph( )
G. add_edges_from(
[ ( 'A' , 'B' ) , ( 'A' , 'C' ) , ( 'A' , 'D' ) , ( 'B' , 'E' ) , ( 'C' , 'D' ) , ( 'C' , 'F' ) , ( 'D' , 'B' ) , ( 'D' , 'E' ) , ( 'D' , 'G' ) , ( 'F' , 'D' ) , ( 'F' , 'G' ) , ( 'G' , 'E' ) ] )
nx. draw( G, with_labels= True )
plt. show( )
def findPath ( graph, start, end, path= [ ] ) :
path = path + [ start]
if start == end:
return path
for node in graph[ start] :
if node not in path:
newpath = findPath( graph, node, end, path)
if newpath:
return newpath
return None
def findAllPath ( graph, start, end, path= [ ] ) :
path = path + [ start]
if start == end:
return [ path]
paths = [ ]
for node in graph[ start] :
if node not in path:
newpaths = findAllPath( graph, node, end, path)
for newpath in newpaths:
paths. append( newpath)
return paths
def findShortestPath ( graph, start, end, path= [ ] ) :
path = path + [ start]
if start == end:
return path
shortestPath = [ ]
for node in graph[ start] :
if node not in path:
newpath = findShortestPath( graph, node, end, path)
if newpath:
if not shortestPath or len ( newpath) < len ( shortestPath) :
shortestPath = newpath
return shortestPath
onepath = findPath( graph, 'A' , 'G' )
print ( '一条路径:' , onepath)
allpath = findAllPath( graph, 'A' , 'G' )
print ( '\n所有路径:' , allpath)
shortpath = findShortestPath( graph, 'A' , 'G' )
print ( '\n最短路径:' , shortpath)
一条路径: ['A', 'C', 'D', 'G']
所有路径: [['A', 'C', 'D', 'G'], ['A', 'C', 'F', 'D', 'G'], ['A', 'C', 'F', 'G'], ['A', 'D', 'G']]
最短路径: ['A', 'D', 'G']