在python中使用DFS在无向图中找到一个循环

问题描述

所以,我正在尝试解决一个任务,我应该使用 DFS 找出给定图中是否存在循环。所以我现在正在努力的是匹配节点,因为它们是字符串类型,我有一些麻烦。我收到的错误消息如下:

类型错误:列表索引必须是整数或切片,而不是图形

所以我想知道如何解决这个问题,或者如何使它适用于 string 而不仅仅是 int?

    graph = dict()
    searched = []
   
    def add_edge(self,node,neighbour):
        if node not in self.graph:
            self.graph[node] = [neighbour]
        else:
            self.graph[node].append(neighbour)
            
   
                        
    
    
    def depth_first_search(self,node):
        if node not in self.searched:
            print("[",end= " ],")
            
            self.searched.append(node)
            if node in self.graph:
                for neighbour in self.graph[node]:
                    self.depth_first_search(neighbour)
            
    def find_cycle(node):
        searched = [False]
        
        for i in searched[node]:
            if searched[i] == [False]*node:
                if(self.depth_first_search(i,neighbour)) == True:
                    return True
        return False
        
        
    def print_edges(self):
        for node in self.graph:
            for neighbour in self.graph[node]:
                print("(",",neighbour,")")
    def print_graph(self):
        print(self.graph)
        

my_graph = Graph()
my_graph.add_edge('A','B')
my_graph.add_edge('B','C')
my_graph.add_edge('B','D')
my_graph.add_edge('D','E')
my_graph.add_edge('D','F')
my_graph.add_edge('C','E')
my_graph.add_edge('E','G')
my_graph.add_edge('F','H')
my_graph.print_graph()
my_graph.print_edges()
my_graph.depth_first_search('A')
result = my_graph.find_cycle()
print(result)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)