省份数量 广度优先搜索
class Solution {
public int findCircleNum(int[][] isConnected) {
Stack<Integer> stack=new Stack<Integer>();
if(isConnected.length==0){
return 0;
}
int visit[]=new int[isConnected.length];
int result=0;
for(int i=0;i<isConnected.length;i++){
if(visit[i]==0){
visit[i]=1;
stack.push(i);
while(!stack.isEmpty()){
int id=stack.pop();
for(int j=0;j<isConnected[id].length;j++){
int adjid=isConnected[id][j];
if(isConnected[id][j]==1&&visit[j]==0){
visit[j]=1;
stack.push(j);
}
}
}
result++;
}
}
return result;
}
}
岛屿数量
class Solution {
public int numIslands(char[][] grid) {
if(grid.length==0){
return 0;
}
int visit[][]=new int[grid.length][grid[0].length];
int x[]={0,0,1,-1};
int y[]={1,-1,0,0};
int result=0;
Stack<int[]>stack=new Stack<>();
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[i].length;j++){
if(grid[i][j]=='1'&&visit[i][j]==0){
int a[]={i,j};
stack.push(a);
visit[a[0]][a[1]]=1;
while(!stack.isEmpty()){
int index[]=stack.pop();
for(int k=0;k<4;k++){
int newx=index[0]+x[k];
int newy=index[1]+y[k];
if(newx>=0&&newx<grid.length&&newy>=0&&newy<grid[0].length&&grid[newx][newy]=='1'&&visit[newx][newy]==0){
visit[newx][newy]=1;
int newa[]={newx,newy};
stack.push(newa);
}
}
}
result++;
}
}
}
return result;
}
}
上面这两个题目用并查集的话可以更快,因为找的是图中的所有连通分量
层次遍历即可