题解 | #岛屿数量#
岛屿数量
http://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e
DFS和BFS两种做法
import java.util.*;
public class Solution {
/**
* 判断岛屿数量
* @param grid char字符型二维数组
* @return int整型
*/
int [][]visited;
int [][]disrs=new int[][]{{0,1},{0,-1},{1,0},{-1,0}};
int isLandCount=0;
public int solve (char[][] grid) {
int n=grid.length;
int m=grid[0].length;
visited=new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(grid[i][j]!='0'&&visited[i][j]!=1){
isLandCount+=bfs(grid,i,j,0,n,m);
}
}
}
return isLandCount;
}
int bfs(char[][]grid,int x,int y,int curD,int n,int m){
visited[x][y]=1;
Queue<Integer> queue=new LinkedList<>();
queue.add(x*m+y);
while(!queue.isEmpty()){
int head=queue.poll();
int x1=head/m;
int y1=head%m;
for(int i=0;i<4;i++){
int newX=x1+disrs[curD][0];
int newY=y1+disrs[curD][1];
if(newX<0||newX>=n||newY<0||newY>=m||visited[newX][newY]!=0||grid[newX][newY]=='0'){
;
}
else{
queue.add(newX*m+newY);
visited[newX][newY]=1;
}
curD=(curD+1)%4;
}
}
return 1;
}
// int dfs(char [][]grid,int x,int y,int curD,int n,int m){
// if(x<0||x>=n||y<0||y>=m){
// return 0;
// }
// if(grid[x][y]=='0')
// return 0;
// if(visited[x][y]==1){
// return 0;
// }
// visited[x][y]=1;
// for(int i=0;i<4;i++){
// int nextX=x+disrs[curD][0];
// int nextY=y+disrs[curD][1];
// dfs(grid,nextX,nextY,curD,n,m);
// curD=(curD+1)%4;
// }
// return 1;
// }
}
public class Solution {
/**
* 判断岛屿数量
* @param grid char字符型二维数组
* @return int整型
*/
int [][]visited;
int [][]disrs=new int[][]{{0,1},{0,-1},{1,0},{-1,0}};
int isLandCount=0;
public int solve (char[][] grid) {
int n=grid.length;
int m=grid[0].length;
visited=new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(grid[i][j]!='0'&&visited[i][j]!=1){
isLandCount+=bfs(grid,i,j,0,n,m);
}
}
}
return isLandCount;
}
int bfs(char[][]grid,int x,int y,int curD,int n,int m){
visited[x][y]=1;
Queue<Integer> queue=new LinkedList<>();
queue.add(x*m+y);
while(!queue.isEmpty()){
int head=queue.poll();
int x1=head/m;
int y1=head%m;
for(int i=0;i<4;i++){
int newX=x1+disrs[curD][0];
int newY=y1+disrs[curD][1];
if(newX<0||newX>=n||newY<0||newY>=m||visited[newX][newY]!=0||grid[newX][newY]=='0'){
;
}
else{
queue.add(newX*m+newY);
visited[newX][newY]=1;
}
curD=(curD+1)%4;
}
}
return 1;
}
// int dfs(char [][]grid,int x,int y,int curD,int n,int m){
// if(x<0||x>=n||y<0||y>=m){
// return 0;
// }
// if(grid[x][y]=='0')
// return 0;
// if(visited[x][y]==1){
// return 0;
// }
// visited[x][y]=1;
// for(int i=0;i<4;i++){
// int nextX=x+disrs[curD][0];
// int nextY=y+disrs[curD][1];
// dfs(grid,nextX,nextY,curD,n,m);
// curD=(curD+1)%4;
// }
// return 1;
// }
}