孤岛的总面积
import java.util.*;
public class Test {
static int count=0;
static int [][]dir = {{0,1},{1,0},{0,-1},{-1,0}};
public static void dfs(int[][]graph,int x,int y){
graph[x][y]=0;
for(int i=0;i<4;i++){
int nextX=x+dir[i][0];
int nextY=y+dir[i][1];
if(nextX<0||nextX>=graph.length||nextY<0||nextY>=graph[0].length)continue;
if(graph[nextX][nextY]==0)continue;
dfs(graph,nextX,nextY);
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int [][]graph=new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
graph[i][j]=in.nextInt();
}
}
for(int i=0;i<n;i++){
if(graph[i][0]==1)dfs(graph,i,0);
if(graph[i][m-1]==1)dfs(graph,i,m-1);
}
for(int i=0;i<m;i++){
if(graph[0][i]==1)dfs(graph,0,i);
if(graph[n-1][i]==1)dfs(graph,n-1,i);
}
int res=0;
for(int i=1;i<n-1;i++){
for(int j=1;j<m-1;j++){
if(graph[i][j]==1)res++;
}
}
System.out.println(res);
}
}
沉没孤岛
import java.util.*;
public class Test {
static int count=0;
static int [][]dir = {{0,1},{1,0},{0,-1},{-1,0}};
static int[][]visit;
public static void dfs(int[][]graph,int x,int y){
visit[x][y]=1;
for(int i=0;i<4;i++){
int nextX=x+dir[i][0];
int nextY=y+dir[i][1];
if(nextX<0||nextX>=graph.length||nextY<0||nextY>=graph[0].length)continue;
if(graph[nextX][nextY]==0||visit[nextX][nextY]==1)continue;
dfs(graph,nextX,nextY);
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
int [][]graph=new int[n][m];
visit=new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
graph[i][j]=in.nextInt();
}
}
for(int i=0;i<n;i++){
if(graph[i][0]==1)dfs(graph,i,0);
if(graph[i][m-1]==1)dfs(graph,i,m-1);
}
for(int i=0;i<m;i++){
if(graph[0][i]==1)dfs(graph,0,i);
if(graph[n-1][i]==1)dfs(graph,n-1,i);
}
for(int i=0;i<n;i++){
for(int j=0;j<m-1;j++){
System.out.print(visit[i][j]+" ");
}
System.out.println(visit[i][m-1]);
}
}
}