HDU 1312 Red and Black
2016-07-05 23:02
337 查看
Red and Black
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 19 Accepted Submission(s) : 15Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem 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)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
45 59 6 13
#include<iostream>#include<stdio.h>#include<cmath>#include<string.h>#include<string>#include<queue>#include<stack>#include<vector>#include<climits>#include<stdlib.h>using namespace std;const int maxn=30;int i,j,k,n,m;char point[maxn][maxn];int sum,sx,sy;int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};void dfs(int x,int y){if(point[x][y]=='#')return;if(x<0||y<0||x>=n||y>=m)return;sum++;point[x][y]='#';for(int i=0;i<4;i++){dfs(x+dir[i][0],y+dir[i][1]);}return;}int main(){while(cin>>m>>n,n&&m){for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>point[i][j];if(point[i][j]=='@') sx=i,sy=j;}sum=0;//cout<<flag[1][1];dfs(sx,sy);cout<<sum<<endl;}return 0;}
相关文章推荐
- 排序算法之冒泡排序、选择排序、直接插入排序(java实现)
- ASP.NET MVC使用jQuery实现Autocomplete
- java中volatile关键字的含义
- IO出错常用错误代码
- jquery radio设置checked但按钮radio仍然没选中的js处理方式-javascript bootstrap
- UNITY 5.3.3 发行说明 中文版
- 软件测试实习0705-循环语句测试
- 用php怎么写mysql导出sql文件
- cocos2d spine 与 tmx相遇崩溃问题
- 二分查找(去哪儿校招题)
- 单独使用fckeditor的文件上传功能
- lightoj 1208
- #define宏定义
- 语法
- 2016/07/05 zend optimizer
- kvm虚似机监控
- Codeforces Round #359 (Div. 2) C DFS
- PHP开发中最常见的10个错误
- 优化MySQL中的分页
- HotSpot虚拟机发起内存回收