HDU 1312 Red and Black(DFS)
2016-02-12 04:03
441 查看
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
Sample Output
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
//Must so #include<iostream> #include<algorithm> #include<string> #include<cstring> #include<ctype.h> #include<queue> #include<vector> #include<set> #include<cstdio> #include<cmath> #define mem(a,x) memset(a,x,sizeof(a)) #define inf 1<<30 #define NN 1000006 using namespace std; const double PI = acos(-1.0); typedef long long LL; /********************************************************************** 题意: 给出一个图,‘@’表示起点,‘.’表示可以走,‘#’表示不能走 只能走四个方向 求最多能走多少格(包括起点) **********************************************************************/ int dx[4] = {0,0,1,-1}; int dy[4] = {1,-1,0,0}; bool vis[22][22]; char mp[30][30]; int row,cow; int ans; void dfs(int x,int y) { for (int i = 0;i < 4;i++) { int xx = x + dx[i]; int yy = y + dy[i]; if (xx < 0||xx >= row||yy < 0||yy >= cow) continue; if (vis[xx][yy] == 0&&mp[xx][yy] == '.') { ans ++; vis[xx][yy] = 1; dfs(xx,yy); } } } int main() { while (~scanf("%d%d",&cow,&row))//先输入行后输入列 { if (row == 0&&cow == 0) break; int x,y; for (int i = 0;i < row;i++) { scanf("%s",mp[i]); } for (int i = 0;i < row;i++) { for (int j = 0;j < cow;j++) { if (mp[i][j] == '@') { x = i; y = j; } } } mem(vis,0); ans = 1; vis[x][y] = 1; dfs(x,y); printf("%d\n",ans); } return 0; }
相关文章推荐
- Java中序列化的serialVersionUID作用
- GAE(Google App Engine)部署时候遇到的问题
- 我与小娜(09):机器与人下围棋,谁胜?
- [Redux] Extracting Action Creators
- apache commons io 2.2(六)工具部分
- 使用Cookie并使用MD5算法实现用户永久登录
- PLC多种编程方法例举
- 无符号数相减问题 C语言
- Android开发常用的36个代码片段
- [Redux] Generating Containers with connect() from React Redux (FooterLink)
- 程序员必须注意的十大编程禁忌
- HDU 1016 Prime Ring Problem(DFS)
- Linux 学习树之基础20160212
- 提升Python编程效率的10点建议
- 小白自学敲代码的零散知识点整理
- [Redux] Generating Containers with connect() from React Redux (AddTodo)
- tkinter界面卡死的解决办法
- day16-----------集合框架
- 【CodeForces 618B】Guess the Permutation
- Asymptotic notation