使用python的Graph DFS算法在访问实用程序列表时显示列表索引超出范围
在给定的程序中,我使用了一个堆栈来实现DFS,并将实用程序列表作为堆栈。 这是一种迭代方法。 错误如下: --->19如果访问[i]==错误: 索引器:列表索引超出范围使用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):
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
既不符合逻辑也不符合逻辑。此外,变量和函数名应遵循带有下划线的小写形式。