原题地址:https://leetcode.cn/problems/number-of-provinces/
题解
从一个点开始BFS搜索所有与之相连的城市
- 对于isConnected[i][i],将其置0表示该城市已被算入一个省份中
- 对于一个被算入该省份的城市,遍历与其相连的所有边,将与之相连的未被算入省份的城市加入队列中
如果遍历对于isConnected仍能搜索到边/一个未被算入省份的城市,则说明存在一个新的省份,cnt++,并继续BFS
遍历完毕后返回cnt即可
时间复杂度:O(N)
空间复杂度:O(N)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public int findCircleNum(int[][] isConnected) { if(isConnected.length==1){return 1;} int cnt=0,rowNow; Queue<Integer> BFS=new LinkedList<>(); for(int i=0;i<isConnected.length;i++){ if(isConnected[i][i]==1){ cnt++; BFS.add(i); while(!BFS.isEmpty()){ rowNow=BFS.remove(); for(int j=0;j<isConnected[i].length;j++){ if(rowNow==j){ isConnected[j][j]=0; }else if(isConnected[rowNow][j]==1&&isConnected[j][j]==1){ BFS.add(j); } } } } } return cnt; } }
|