题目
思路
- 每个身份之间都是连通的
- 我们可以使用深搜对一次连通的省份做标记,深搜结束省份加一
- 再次深搜第一个临界节点,每次深搜都要判断该节点是否已经被访问
注意:
不要将hash思想限制在两列,hash映射可以映射多列数据
如果当前数是最大于(不等于)最大值,直接返回长度,等于的情况再取最小值
代码:
class Solution {
//行和列相同
int row;
int col;
int num;
boolean[] visit;
public int findCircleNum(int[][] isConnected) {
row=isConnected.length;
col=isConnected[0].length;
//已经访问过的节点无需访问
visit=new boolean[row];
for(int i=0;i<row;i++){
if(visit[i]==false){
dfs(isConnected,i);
num++;
}
}
return num;
}
public void dfs(int[][] isConnected,int r){
visit[r]=true;
for(int j=0;j<col;j++){
if(isConnected[r][j]==1&&visit[j]==false){
dfs(isConnected,j);
}
}
}
}