岛屿数量
深搜
static int [][]dir = {{0,1},{1,0},{0,-1},{-1,0}};
public static void dfs(int[][]graph,boolean[][]visit,int x,int y){
if(visit[x][y]||graph[x][y]==0)return;
visit[x][y]=true;
for(int i=0;i<4;i++){
int nextX=x+dir[i][0];
int nextY=y+dir[i][1];
if(nextX<0||nextY<0||nextX>=graph.length||nextY>=graph[0].length)continue;
dfs(graph,visit,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();
}
}
boolean [][]visit=new boolean[n][m];
int res=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!visit[i][j]&&graph[i][j]==1){
res++;
dfs(graph,visit,i,j);
}
}
}
System.out.println(res);
}
广搜
public class Test {
static int [][]dir = {{0,1},{1,0},{0,-1},{-1,0}};
public static void bfs(int[][]graph,boolean[][]visit,int x,int y){
Deque<int[]> que=new LinkedList<>();
que.push(new int[]{x,y});
while (!que.isEmpty()) {
int curX=que.getFirst()[0];
int curY=que.getFirst()[1];
que.pop();
for (int i = 0; i < 4; i++) {
int nextx = curX + dir[i][0];
int nexty = curY + dir[i][1];
if (nextx < 0 || nextx >= graph.length|| nexty < 0 || nexty >= graph[0].length) continue; // 越界了,直接跳过
if (!visit[nextx][nexty] && graph[nextx][nexty] == 1) {
que.push(new int[]{nextx, nexty});
visit[nextx][nexty] = true; // 只要加入队列立刻标记
}
}
}}
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();
}
}
boolean [][]visit=new boolean[n][m];
int res=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!visit[i][j]&&graph[i][j]==1){
res++;
bfs(graph,visit,i,j);
}
}
}
System.out.println(res);
}
}
100.岛屿的最大面积
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,boolean[][]visit,int x,int y){
for(int i=0;i<4;i++){
int nextX=x+dir[i][0];
int nextY=y+dir[i][1];
if(nextX<0||nextY<0||nextX>=graph.length||nextY>=graph[0].length)continue;
if(!visit[nextX][nextY]&&graph[nextX][nextY]==1){
visit[nextX][nextY]=true;
count++;
dfs(graph,visit,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();
}
}
boolean [][]visit=new boolean[n][m];
int res=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(!visit[i][j]&&graph[i][j]==1){
count = 1;
visit[i][j] = true;
dfs(graph,visit,i,j);
res=Math.max(res,count);
}
}
}
System.out.println(res);
}
}