// 找岛屿的最大值
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int[][] data=new int[a][b];
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
data[i][j]=in.nextInt();
}
}
int res=subfunc(data);
System.out.println(res);
}
}
// static int sum=0;
// static int num=0;
static int[][] dirs = new int[][]{{-1,0}, {1,0}, {0,-1}, {0,1}};
// 统计岛屿数目
public static int subfunc(int[][]data){
int row=data.length;
int col=data[0].length;
int max=0;
int num=0;
//找个数
// Stack<int[]> sta=new Stack<int[]>();
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
// if(data[i][j]==1){
// num++;
// }
int sum=0;
Stack<int[]> sta=new Stack<int[]>();
sta.push(new int[]{i,j});
while(!sta.isEmpty()){
int[] temp=sta.peek();
sta.pop();
if(temp[0]<0||temp[1]<0||temp[0]>=row||temp[1]>=col||data[temp[0]][temp[1]]==0){
continue;
}
sum++;
data[temp[0]][temp[1]]=0;
for(int index=0;index<4;index++){
int x=dirs[index][0]+temp[0];
int y=dirs[index][1]+temp[1];
sta.push(new int[]{x,y});
}
}
max=Math.max(max,sum);
}
}
return max;
}
}
栈实现岛屿之和
最新推荐文章于 2024-11-01 14:48:20 发布