В данной программе я использовал стек для реализации DFS со списком утилит в качестве стека. Это итеративный подход. Ошибка здесь выглядит следующим образом:
---> 19 при посещении [i] == False:
IndexError: индекс списка вне диапазона
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)