问题描述
所以,我在网上找到了这段代码,当我使用我的编辑器时它运行良好,但是当我将边更改为我正在处理的图形时,它只运行但没有返回结果,我怀疑有限制我编辑的原始代码中的边数
# This class represents a directed graph
# using adjacency list representation
class Graph:
def __init__(self,vertices):
# No. of vertices
self.V = vertices
# default dictionary to store graph
self.graph = defaultdict(list)
# function to add an edge to graph
def addEdge(self,u,v):
self.graph[u].append(v)
g = Graph(111)
g.addEdge(4,5)
g.addEdge(4,6)
g.addEdge(4,7)
g.addEdge(5,8)
g.addEdge(5,8)
g.addEdge(6,10)
g.addEdge(6,12)
g.addEdge(7,13)
g.addEdge(8,9)
g.addEdge(9,6)
g.addEdge(10,11)
g.addEdge(11,14)
g.addEdge(11,15)
g.addEdge(12,17)
g.addEdge(12,19)
g.addEdge(13,18)
g.addEdge(13,20)
g.addEdge(14,21)
g.addEdge(14,22)
g.addEdge(15,24)
g.addEdge(15,25)
g.addEdge(17,23)
g.addEdge(18,38)
g.addEdge(18,43)
g.addEdge(19,26)
g.addEdge(19,37)
g.addEdge(20,54)
g.addEdge(21,56)
g.addEdge(21,57)
g.addEdge(22,58)
g.addEdge(22,59)
g.addEdge(23,61)
g.addEdge(23,62)
g.addEdge(24,60)
g.addEdge(25,64)
g.addEdge(25,102)
g.addEdge(26,27)
g.addEdge(26,115)
g.addEdge(27,28)
g.addEdge(27,29)
g.addEdge(28,35)
g.addEdge(28,36)
g.addEdge(29,30)
g.addEdge(29,31)
g.addEdge(30,32)
g.addEdge(31,33)
g.addEdge(31,34)
g.addEdge(32,117)
g.addEdge(33,112)
g.addEdge(34,113)
g.addEdge(35,117)
g.addEdge(36,110)
g.addEdge(37,108)
g.addEdge(37,66)
g.addEdge(38,39)
g.addEdge(39,40)
g.addEdge(39,41)
g.addEdge(40,42)
g.addEdge(40,103)
g.addEdge(41,73)
g.addEdge(42,104)
g.addEdge(42,105)
g.addEdge(43,44)
g.addEdge(43,47)
g.addEdge(44,45)
g.addEdge(45,46)
g.addEdge(46,51)
g.addEdge(46,53)
g.addEdge(46,11)
g.addEdge(47,48)
g.addEdge(47,49)
g.addEdge(47,50)
g.addEdge(48,111)
g.addEdge(49,117)
g.addEdge(50,39)
g.addEdge(51,52)
g.addEdge(52,117)
g.addEdge(53,70)
g.addEdge(54,55)
g.addEdge(55,77)
g.addEdge(55,82)
g.addEdge(56,107)
g.addEdge(57,110)
g.addEdge(58,117)
g.addEdge(60,99)
g.addEdge(60,100)
g.addEdge(61,107)
g.addEdge(62,63)
g.addEdge(63,115)
g.addEdge(64,106)
g.addEdge(66,67)
g.addEdge(67,68)
g.addEdge(67,51)
g.addEdge(68,69)
g.addEdge(68,71)
g.addEdge(69,70)
g.addEdge(70,73)
g.addEdge(70,74)
g.addEdge(71,72)
g.addEdge(72,92)
g.addEdge(73,11)
g.addEdge(74,75)
g.addEdge(75,76)
g.addEdge(75,82)
g.addEdge(76,77)
g.addEdge(77,78)
g.addEdge(77,80)
g.addEdge(78,79)
g.addEdge(79,117)
g.addEdge(80,81)
g.addEdge(81,83)
g.addEdge(81,91)
g.addEdge(82,115)
g.addEdge(83,84)
g.addEdge(83,86)
g.addEdge(84,85)
g.addEdge(85,117)
g.addEdge(86,87)
g.addEdge(87,88)
g.addEdge(87,89)
g.addEdge(87,117)
g.addEdge(88,117)
g.addEdge(89,90)
g.addEdge(90,117)
g.addEdge(91,117)
g.addEdge(92,93)
g.addEdge(92,95)
g.addEdge(93,94)
g.addEdge(94,117)
g.addEdge(95,96)
g.addEdge(95,98)
g.addEdge(96,97)
g.addEdge(97,117)
g.addEdge(98,117)
g.addEdge(99,106)
g.addEdge(100,109)
g.addEdge(102,117)
g.addEdge(103,117)
g.addEdge(104,117)
g.addEdge(105,117)
g.addEdge(106,117)
g.addEdge(107,117)
g.addEdge(108,117)
g.addEdge(109,117)
g.addEdge(110,117)
g.addEdge(111,117)
g.addEdge(112,117)
g.addEdge(113,117)
g.addEdge(114,117)
g.addEdge(115,117)
g.addEdge(116,117)
'''A recursive function to print all paths from 'u' to 'd'.
visited[] keeps track of vertices in current path.
path[] stores actual vertices and path_index is current
index in path[]'''
def printAllPathsUtil(self,d,visited,path):
# Mark the current node as visited and store in path
visited[u]= True
path.append(u)
# If current vertex is same as destination,then print
# current path[]
if u == d:
print (path)
else:
# If current vertex is not destination
# Recur for all the vertices adjacent to this vertex
for i in self.graph[u]:
if visited[i]== False:
self.printAllPathsUtil(i,path)
# Remove current vertex from path[] and mark it as unvisited
path.pop()
visited[u]= False
# Prints all paths from 's' to 'd'
def printAllPaths(self,s,d):
# Mark all the vertices as not visited
visited =[False]*(self.V)
# Create an array to store paths
path = []
# Call the recursive helper function to print all paths
self.printAllPathsUtil(s,path)
s = 4 ; d = 117
print ("Following are all different paths from % d to % d :" %(s,d))
g.printAllPaths(s,d)
解决方法
您的图形类应该更像这样:
class Graph:
def __init__(self,vertices):
self.V = vertices
self.graph = defaultdict(list)
def addEdge(self,u,v):
self.graph[u].append(v) # end of method!
def printAllPathsUtil(self,d,visited,path):
visited[u]= True
# ...
def printAllPaths(self,s,d):
visited = [False] * (self.V)
# ...
self.printAllPathsUtil(s,path) # end of method!
现在您可以创建一个实例并在其上调用方法:
g = Graph(111)
g.addEdge(4,5)
g.addEdge(4,6)
# ...
s = 4
d = 117
# ...
g.printAllPaths(s,d)
但是这段代码不应该出现在任何 Graph
类的方法中!