这个用于查找所有可能路径的图形的python代码运行但不返回任何结果

问题描述

所以,我在网上找到了这段代码,当我使用我的编辑器时它运行良好,但是当我将边更改为我正在处理的图形时,它只运行但没有返回结果,我怀疑有限制我编辑的原始代码中的边数

# 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 类的方法中!