TZOJ 3286:湖计数 深搜
描述
由于最近的降雨,在 Farmer John 的田地的各个地方积水,由 N x M (1 <= N <= 100; 1 <= M <= 100) 正方形组成的矩形表示。每个方格包含水('W')或旱地('.')。农夫约翰想弄清楚他的田地里形成了多少池塘。池塘是一组相连的正方形,里面有水,其中一个正方形被认为与其所有八个邻居相邻。
给定农民约翰的田地图,确定他有多少池塘。
输入
* 第 1 行:两个以空格分隔的整数:N 和 M
* 第 2..N+1 行:每行 M 个字符代表 Farmer John 的田地的一行。每个字符都是“W”或“.”。字符之间没有空格。
输出
* 第 1 行:Farmer John 田地中的池塘数量。
样例输入
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
样例输出
3
提示
输出细节:
共有三个池塘:一个在左上角,一个在左下角,一个在右侧。
AC感想:
深搜模板,输入地图-初始化-dfs开搜-将所有可标记点标记-记录答案
dfs:找下一步的坐标-判断是否越界-判断是否可走-可走则标记下一步,以下一步为起点继续深搜
#include<iostream> #include<stdio.h> #include<algorithm> #include<cstring> using namespace std; struct node{ int x,y,step; }; node a[3000]; char mmp[101][101]; int sum = 0,f,have=0; int n,m; int sx,sy; int book[101][101]; int nex[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; void dfs(int x,int y) { int tx,ty; book[x][y] = 1; for(int i=0;i<8;i++) { tx = x+nex[i][0]; ty = y+nex[i][1]; if(tx<1||tx>n||ty<1||ty>m)continue; if(mmp[tx][ty]!='.'&&book[tx][ty]!=1) { book[tx][ty]=1; dfs(tx,ty); } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>mmp[i][j]; } getchar(); } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(mmp[i][j]=='W'&&book[i][j]!=1) { sx = i; sy = j; have = 1; dfs(sx,sy); sum++; } } } cout<<sum<<endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现