BFS
//官方题解
class Solution {
public int findCircleNum(int[][] isConnected) {
int provinces = isConnected.length;
boolean[] visited = new boolean[provinces];
int circles = 0;
Queue<Integer> queue = new LinkedList<Integer>();
//遍历所有城市,一次循环
for (int i = 0; i < provinces; i++) {
//对于每个城市
if (!visited[i]) {
//一、先入队,为了能进入随后的循环
queue.offer(i);
//按队列顺序循环,直至清空
while (!queue.isEmpty()) {
//二、先出队,取出当前元素
int j = queue.poll();
//三、出队同时视为已访问
visited[j] = true;
//四、处理当前元素的关联元素,即入队
for (int k = 0; k < provinces; k++) {
if (isConnected[j][k] == 1 && !visited[k]) {
queue.offer(k);
}
}
}
//一个城市所有相连城市遍历完成,表明确定了一个省份circles
circles++;
}
}
return circles;
}
}