博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1979 Red and Black
阅读量:2439 次
发布时间:2019-05-10

本文共 2230 字,大约阅读时间需要 7 分钟。

Red and Black
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 24058   Accepted: 13007

Description

There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles. 
Write a program to count the number of black tiles which he can reach by repeating the moves described above. 

Input

The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20. 
There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows. 
'.' - a black tile 
'#' - a red tile 
'@' - a man on a black tile(appears exactly once in a data set) 
The end of the input is indicated by a line consisting of two zeros. 

Output

For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).

Sample Input

6 9....#......#..............................#@...#.#..#.11 9.#..........#.#######..#.#.....#..#.#.###.#..#.#..@#.#..#.#####.#..#.......#..#########............11 6..#..#..#....#..#..#....#..#..###..#..#..#@...#..#..#....#..#..#..7 7..#.#....#.#..###.###...@...###.###..#.#....#.#..0 0

Sample Output

4559613

题意:问从@出发可以到的点的个数

简单搜索!!!

参考代码:

#include 
#include
#include
using namespace std;typedef long long ll;char map[22][22];bool used[22][22];int dp[22][22];int n,m;int dirx[]={ 0,-1,0,1};int diry[]={-1, 0,1,0};int dfs(int x,int y){ int sum=0; if (used[x][y]==true) return 0; if (dp[x][y]!=0) return dp[x][y]; used[x][y]=true; for (int i=0;i<4;i++){ int xx=x+dirx[i],yy=y+diry[i]; if (map[xx][yy]=='.' && used[xx][yy]==false && xx
=0 && yy
=0){ sum+=dfs(xx,yy); } } dp[x][y]=sum+1; return sum+1;}int main(){ while (cin>>n>>m){ if (n==0&&m==0) break; int x,y; memset(used,false,sizeof(used)); memset(dp,0,sizeof(dp)); for (int i=0;i
>map[i][j]; if (map[i][j]=='@'){ x=i; y=j; } } } cout<
<

转载地址:http://qfbqb.baihongyu.com/

你可能感兴趣的文章
如何处理承诺拒绝
查看>>
dom5秒计时截断_使用DOM时计时的重要性
查看>>
安装后使用Docker的第一步
查看>>
c结构体定义_C结构
查看>>
javascript 逗号_JavaScript中逗号的奇怪用法
查看>>
软件开发 自由职业_如何以开发人员身份开始自由职业
查看>>
node js 图像压缩_如何使用Node.js下载图像
查看>>
文件命名为node.js_如何在Node.js中批量重命名文件
查看>>
如何反转JavaScript数组
查看>>
如何安装svelte_如何在Svelte中动态应用CSS
查看>>
c#枚举类型_C枚举类型
查看>>
如何在数据库中存储用户密码_如何在数据库中存储密码
查看>>
gatsby_使用Gatsby加载外部JS文件
查看>>
窗口怎么退出扩展窗口_如何创建退出意图弹出窗口
查看>>
docker删除映像_如何将更改提交到Docker映像
查看>>
本地ssl证书生成_如何生成本地SSL证书
查看>>
c语言中的null_如何在C中使用NULL
查看>>
如何在macOS中安装本地SSL证书
查看>>
axios 请求嵌入请求_如何对每个Axios请求强制使用凭据
查看>>
检查node.js版本_如何在运行时检查当前的Node.js版本
查看>>