使用python的Graph DFS算法在访问实用程序列表时显示列表索引超出范围

使用python的Graph DFS算法在访问实用程序列表时显示列表索引超出范围,python,algorithm,list,data-structures,graph,Python,Algorithm,List,Data Structures,Graph,在给定的程序中,我使用了一个堆栈来实现DFS,并将实用程序列表作为堆栈。 这是一种迭代方法。 错误如下: --->19如果访问[i]==错误: 索引器:列表索引超出范围 from collections import defaultdict class Graph: def __init__(self): self.graph = defaultdict(list) def addEdge(self, u, v):

在给定的程序中,我使用了一个堆栈来实现DFS,并将实用程序列表作为堆栈。 这是一种迭代方法。 错误如下:

--->19如果访问[i]==错误:

索引器:列表索引超出范围

    from collections import defaultdict

    class Graph:
        def __init__(self):
            self.graph = defaultdict(list)

        def addEdge(self, u, v):
            self.graph[u].append(v)

        def dfs_stack(self, start, visited):
            stack = []
            stack.append(start)

            while(len(stack) != 0):
               #pop
               i = stack.pop()

               #if not visited: visit and print
               if visited[i] == False: THE ERROR IS ON THIS LINE
                 visited[i]=True
                 print(i , end = " ")

               #push all unvisited adjacent vertices
               for adj in self.graph[i]:
                  if visited[i] == False:
                    stack.append(i)


       def DFS(self, start):
          visited = [False]*(len(self.graph)+1)
          self.dfs_stack(start,visited)



g = Graph()
g.addEdge(1, 2) 
g.addEdge(2, 3) 
g.addEdge(3, 4) 
g.addEdge(4, 5) 
g.addEdge(5, 1) 
g.addEdge(2, 6)
g.addEdge(3, 6)
g.addEdge(8, 7)
g.DFS(8) 

图形的长度实际上只有
6
,因为图形是:

{1: [2], 2: [3, 6], 3: [4, 6], 4: [5], 5: [1], 8: [7]}
您创建的
visted[]
长度为
6
,当您访问
visted[8]
时,它会将
索引器:列表索引抛出范围之外


您需要创建长度等于
lastvertex
visited[]
,即
8

图形的长度实际上只有
6
,因为您的图形是:

{1: [2], 2: [3, 6], 3: [4, 6], 4: [5], 5: [1], 8: [7]}
您创建的
visted[]
长度为
6
,当您访问
visted[8]
时,它会将
索引器:列表索引抛出范围之外


您需要创建长度等于
lastvertex
visited[]
,即
8

始终共享整个错误消息。小心,使用
==False
既不符合逻辑也不符合逻辑。此外,变量和函数名称应遵循带有下划线的
小写形式。始终共享整个错误消息。小心,使用
==False
既不符合逻辑也不符合逻辑。此外,变量和函数名应遵循带有下划线的
小写形式。