Red and Black
来源:互联网 发布:阿里双十一数据分析 编辑:程序博客网 时间:2024/05/16 06:13
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)
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 Sample Output
Write a program to count the number of black tiles which he can reach by repeating the moves described above.
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)
6 9....#......#..............................#@...#.#..#.11 9.#..........#.#######..#.#.....#..#.#.###.#..#.#..@#.#..#.#####.#..#.......#..#########............11 6..#..#..#....#..#..#....#..#..###..#..#..#@...#..#..#....#..#..#..7 7..#.#....#.#..###.###...@...###.###..#.#....#.#..0 0
4559613
简单的dfs,注意检索位置要算上一个。
#include<iostream>#include <cstring>#include<string>#include<cmath>using namespace std;char map[22][22];int sum,v[22][22],m,n;void dfs(int a,int b){ sum++; v[a][b]=1; if ((map[a+1][b]=='.')&&(v[a+1][b]==0)&&((a+1)<=n)) dfs(a+1,b); if ((map[a-1][b]=='.')&&(v[a-1][b]==0)&&((a-1)>=1)) dfs(a-1,b); if ((map[a][b+1]=='.')&&(v[a][b+1]==0)&&((b+1)<=m)) dfs(a,b+1); if ((map[a][b-1]=='.')&&(v[a][b-1]==0)&&((b-1)>=1)) dfs(a,b-1);}int main(){ int i,j,a,b; char s[21]; while(cin>>m>>n,m+n>0) { sum=0; memset(v,0,sizeof(v)); for (i=1;i<=n;i++) { cin>>s; for (j=1;j<=m;j++) { map[i][j]=s[j-1]; if (s[j-1]=='@') { a=i; b=j; } } } dfs(a,b); cout<<sum<<endl; }}
0 0
- Red and Black
- red and black
- HDUOJ1312 Red and Black
- Red and Black
- red and black
- Red and Black
- HDOJ Red and Black
- HDU1312( Red and Black )
- Red and Black
- hdu1312 Red and Black
- 深搜:Red and Black
- 1038 Red and Black
- HDU1312 Red and Black
- HDU Red and Black
- Red and Black
- HDU1312:Red and Black
- 1001Red and Black
- Red and Black 搜索
- 我的职场经验分享
- <转>【重磅干货整理】机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总
- Android 复杂的列表视图新写法 MultiType
- 使用Pycharm安装pip等模块
- 说说摩拜单车的骑后感
- Red and Black
- Nginx环境的主配置文件Nginx.Conf详解
- iOS应用根据经纬度打开不同地图app进行导航
- oracle11g分区表按时间自动创建
- 卷积神经网络(CNN)
- R语言分类算法之距离判别(Distance Discrimination)
- NAT超时介绍
- 【数据库】获取服务器时间
- Android中attrs.xml文件的使用详解