POJ_1979_dfs
2024-08-29 06:02:38
题目描述:
每组数据给你一张字符的图,'@'代表起点,'.'代表可走的路,'#'代表墙,求从起点出发,可到达的位置的数量,包括起点。
思路:
dfs基础题,从起始点开始,每一次所在的点,只要不出界并且字符为'@'或'.',则把这个点的字符改为一个标志,再向四周扩散。如果出了边界或者遇到'#',则这条路到尽头。
最后只要遍历整张图,统计标志的数量即可。
好像有点不道德,直接把原图修改了= =
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string a[];
int H,W,dir[][] ={{,-},{,},{,},{-,}}; void dfs(int x,int y)
{
if(x < || x >= H || y < || y >= W) return;
if(a[x][y] == '.' || a[x][y] == '@')
{
a[x][y] = '';
for(int i = ;i < ;i++)
{
int xx = x+dir[i][],yy = y+dir[i][];
dfs(xx,yy);
}
}
} int main()
{
while(cin >> W >> H && W && H)
{
int beginx,beginy; for(int i = ;i < H;i++)
{
cin >> a[i];
}
for(int i = ;i < H;i++)
{
for(int j = ;j < W;j++)
{
if(a[i][j] == '@')
{
beginx = i;
beginy = j;
}
}
}
dfs(beginx,beginy);
int sum = ;
for(int i = ;i < H;i++)
{
for(int j = ;j < W;j++)
{
if(a[i][j] == '') sum++;
}
}
cout << sum << endl;
}
return ;
}
最新文章
- 利用office2010 word2010生成目录
- Runtime获取一个类中所有成员变量的名字和类型
- (转载)LCA问题的Tarjan算法
- angularjs2 学习笔记(三) 服务
- 获取windows版本信息
- javascript闭包分析
- 解决android studio 创建新项目后假死
- Mirantis OpenStack HA
- ZIP文件解压
- 由Find All References引发的思考。,
- 剑指Offer面试题39(Java版):二叉树的深度
- Xapian索引-文档检索过程分析之匹配百分比
- 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading)
- PS快速调出天蓝色清新外景
- pgadmin连接 postgresql远程设置
- Python中matplotlib模块解析
- PAT A1104 Sum of Number Segments (20 分)——数学规律,long long
- HDU 2522 A simple problem (模拟)
- Eclipse启动参数设置
- 修改windows服务的描述