LeetCode每日一题,547. Number of Provinces
先看题目描述
大意就是给定一个图的邻接矩阵,让我们求该图的连通分量的总数
算法和思路
深度优先搜索
遍历所有城市,对于每个城市,如果该城市尚未被访问过,则从该城市开始深度优先搜索,通过邻接矩阵得到该城市的相邻城市,这些城市和该城市属于一个连通分量,然后继续对这些城市继续深度优先搜索,直到一个连通分量内的所有城市均被访问过。遍历完所有城市后,即可得到该图的连通分量的总数
广度优先搜索
这个算法和深度优先搜索的思路差不多,只是搜索方式由深度优先搜索改为了广度优先搜索。遍历所有城市,对于每个城市,如果该城市尚未被访问过,则从该城市开始广度优先搜索,通过邻接矩阵得到该城市的相邻城市,这些城市和该城市属于一个连通分量,然后继续对这些城市进行广度优先搜索,直到一个连通分量内的所有城市均被访问过。遍历完所有城市后,即可得到该图的连通分量的总数
并查集
这题我们也可以使用并查集,初始时,每个城市属于不同的连通分量,然后我们遍历邻接矩阵,对于每对相邻的城市,我们将其所属的连通分量合并。遍历完邻接矩阵后,我们就可得到该图的连通分量的总数
算法和源码
深度优先搜索
1 | class Solution { |
广度优先搜索
1 | class Solution { |
并查集
实现的并查集算法的代码中使用了路径压缩和按秩合并来优化算法的运行效率
1 | class Solution { |