📜  门| Gate IT 2005 |问题17(1)

📅  最后修改于: 2023-12-03 14:58:23.196000             🧑  作者: Mango

问题17:门

题目描述

现在有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)$