最大的岛屿(Java)广度优先搜索
public class MaxIsland {
public static void main(String args[]){
int [][] grid = {{1,1,0,0,1},{1,0,0,1,0},{1,1,0,1,0},{0,0,1,0,0}};
int row = grid.length;
int col = grid[0].length;
boolean [][] visited = new boolean[row][col];
int Maxarea=0;
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(grid[i][j]==1 && !visited[i][j]){
int area = getArea(grid,visited,i,j);
System.out.println(area);
Maxarea=area>Maxarea?area:Maxarea;
}
}
}
System.out.println("最大的的岛屿为:" + Maxarea);
}
public static int getArea(int [][] grid,boolean [][] visited, int i,int j){
Queue<int []> queue = new LinkedList<int []>();
queue.add(new int [] {i,j});
visited[i][j]=true;
int [][] circ = {{-1,0},{1,0},{0,-1},{0,1}};
int Area=0;
while (!queue.isEmpty()){
int [] pos = queue.remove();
Area=Area+1;
for(int [] cir : circ){
int r = pos[0]+cir[0];
int c = pos[1]+cir[1];
if(r<grid.length && c <grid[0].length && r>=0 && c>=0 && !visited[r][c] && grid[r][c]==1){
queue.add(new int[]{r,c});
visited[r][c]=true;
}
}
}
return Area;
}
}