Lake Counting
有一个大小为 N×M的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通指的是下图中相对 W 的*的部分)
***
*W*
***
限制条件#
N, M ≤ 100
输入#
N=10, M=12
园子如下图(‘W’表示积水,’.'表示没有积水)
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
输出#
3
深度优先搜索
从任意的W开始,不停地把邻接的部分用’.‘代替。1次DFS后与初始的这个W连接的所有W就都被替换成了’.’,因此直到图中不再存在W为止,
java实现#
import java.util.Scanner;
public class Main {
static char arr[][];
static int sum,N,M;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scn = new Scanner(System.in);
sum=0;
N=scn.nextInt();
M=scn.nextInt();
arr=new char[N][M];
for(int i=0;i<N;i++) {
arr[i]=scn.next().toCharArray();
}
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
if(arr[i][j]=='W') {
f(i,j);
sum++;
}
}
}
System.out.println(sum);
}
private static void f(int i, int j) {
// TODO Auto-generated method stub
for(int a=i-1;a<=i+1;a++) {
for(int b=j-1;b<=j+1;b++) {
if(a<0||b<0||a>=N||b>=M) continue;
if(arr[a][b]=='W') {
arr[a][b]='.';
f(a,b);
}
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY