从阿岚出发能走到几个人
运行下面这段程序: #include <iostream> #include <string> #include <utility> #include <vector> using names
从北辰出发呢
同一张图,改成从北辰出发。运行下面这段程序: #include <iostream> #include <string> #include <utility> #include <vector>
写一个 BFS
补全 bfs_count:用队列从 start 出发,返回一共能走到几个人(含自己)。⚠️ 这张图里阿岚、小满、阿泰构成一个三角——不记已访问就会一直转圈。 (本题用 g++ -std=c++17 -O0 编译。)
换成 DFS 结果应该一样
补全 dfs_count:把队列换成栈(从末尾取),其余一样。能走到的人数和 BFS 完全相同——走法不同,能到的地方是一样的。 (本题用 g++ -std=c++17 -O0 编译。)
这张图断成了几块
补全 components:数出这张图有几个互相走不通的连通块。做法:对每个还没被走到的人各做一次遍历,做了几次就是几块。 (本题用 g++ -std=c++17 -O0 编译。)
并查集是用来干什么的
第 1 步:p[i]:每人先自己领头 第 2 步:岚-满:根 0 挂到 1 下 第 3 步:岚-泰:根 1 挂到 2 下 第 4 步:满-泰:已是同一块,不动 第 5 步:泰-风:根 2 挂到 3 下 第 6 步:只有 4 号还是自己领头
路径压缩是什么意思
并查集里的「路径压缩」指的是【0】。
合并之后这两人连通了吗
一开始每个人自己一块。运行下面这段程序: #include <iostream> #include <string> #include <utility> #include <vector>
合并完一共有几块
同样合并完之后。运行下面这段程序: #include <iostream> #include <string> #include <utility> #include <vector> usi
写一个带压缩的 find
补全 find_root:一路往上找到根,顺手把沿途的点往上挂一层。这次查的是一条手工搭出来的链 a→b→c,输出根是谁。 (本题用 g++ -std=c++17 -O0 编译。)