在这里,我写了一些代码来查找图形的组件编号,输入样式如下:
5
4
0 1
0 2
1 2
3 4
第一行是顶点数,第二行是边数,其余是每条边。
在我的代码中,我在递归函数中使用了一个全局变量,所以有一些好方法可以替换它吗?换句话说,如何以更好的方式对函数进行编程?
代码:
def dfs(graph, root_vertex):
global visited
visited.add(root_vertex)
for pairs in graph:
if (root_vertex in pairs) and pairs[1 -pairs.index(root_vertex)] not in visited :
visited.add(pairs[1 - pairs.index(root_vertex)])
dfs(graph, pairs[1 - pairs.index(root_vertex)])
vertex_num = int(input())
edge_num = int(input())
graph = []
for i in range(edge_num):
graph.append(tuple(sorted(map(int,input().split()))))
tot_vertex = set([i for i in range(vertex_num)])
visited = set()
count = 0
while list(tot_vertex - visited):
dfs(graph, list(set(tot_vertex) - set(visited))[0])
count += 1
print(count)
答案 0 :(得分:0)
当您需要跨不同函数调用可访问的变量时 - 无论是不同的函数还是相同函数的递归调用 - 模式是创建类的函数方法,然后使用成员变量来实现"全球&#34 ;.这是类的基本用例。
此处visited
集可以是成员变量,只要您一次不会从多个线程中搜索。这可以作为一个限制,因为Search
应该是类,而不是被搜索的东西。如果需要同时搜索多个线程,则每个线程创建一个Search
对象。