poj 1979 &&hdu 1312Red and Black (bfs)
2015-12-21 00:07
393 查看
Red and Black
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
45
59
6
13
solution:
bfs水题
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
45
59
6
13
solution:
bfs水题
#include<cstdio> #include<queue> #include<iostream> using namespace std; int n, m,vis[50][50]; char map[50][50]; int dx[5] = { -1, 0, 0, 1 }, dy[5] = { 0, -1, 1, 0 }; struct node{ int x, y; }now,no; int main() { while (scanf("%d%d", &m, &n) && n + m) { queue<node>q; getchar(); for (int i = 0; i < 50; i++) for (int j = 0; j < 50; j++) vis[i][j] = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%c", &map[i][j]); if (map[i][j] == '@'){ vis[i][j] = 1; no.x = i; no.y = j; q.push(no); } } getchar(); } int ans = 1; while (!q.empty()) { now = q.front(); q.pop(); for (int i = 0; i < 4; i++) { no.x = now.x + dx[i]; no.y = now.y + dy[i]; if (no.x < 0 || no.x >= n || no.y < 0 || no.y >= m)continue; if (map[no.x][no.y] == '.'&&vis[no.x][no.y] == 0) { vis[no.x][no.y] = 1; q.push(no); ans++; } } } printf("%d\n", ans); } }
相关文章推荐
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
- python3.3三种简单获取网页信息的方法
- 五步看盘法》---韩东良(完整版)
- 一篇谈论Scrum的好文章
- QQ粘性布局
- 粒子效果
- ruby.new
- 倒影
- 音乐震动条
- php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
- 详解PHP实现执行定时任务
- PHP定时执行任务的3种方法详解
- 详解PHP执行定时任务的实现思路
- php阿拉伯数字转中文人民币大写
- 变量在 PHP7 内部的实现(一)
- 变量在 PHP7 内部的实现(二)
- 关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
- 反射调用private方法实践(php、java)
- Linux下从零开始安装配置Nginx服务器+PHP开发环境
- 在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程