📅  最后修改于: 2023-12-03 14:58:23.196000             🧑  作者: Mango
现在有n个房间,他们之间通过m个门连接,第i个门连接了$a_i$和$b_i$两个房间。现在从1号房间出发,只能通过开着的门进入到相邻的房间,问最终能到达几个房间?
第一行包含两个整数n和m。
接下来m行,每行包含两个整数$a_i$和$b_i$。
输出能够到达的房间总数。
$1≤n,m≤10^5$
输入 #1
5 5
1 2
1 3
1 5
3 4
4 5
输出 #1
5
输入 #2
3 3
1 2
2 3
3 1
输出 #2
3
本题可以使用深度优先搜索(DFS)算法来求解。
具体实现方式是:从1号房间开始, DFS搜索与之相邻的未访问过的房间,直到无法再走为止,记录访问过的房间数,并进行返回。
重复以上步骤,直到搜索完所有未访问的房间为止。
def dfs(node, visited, graph):
visited[node] = True
for i in graph[node]:
if not visited[i]:
dfs(i, visited, graph)
if __name__ == "__main__":
n, m = map(int, input().split())
graph = [[] for _ in range(n + 1)]
for i in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
visited = [False] * (n + 1)
dfs(1, visited, graph)
print(sum(visited))
时间复杂度: $O(n+m)$