OpenJudge

A:Red and Black

总时间限制:
1000ms
内存限制:
65536kB
描述
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.
输入
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.
输出
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).
样例输入
6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0
样例输出
45
59
6
13
来源
Japan 2004 Domestic

1. STL编程接口:
1)(多道题均可能用到)STL队列中queue.push()是在“队尾”插入,“队头”元素访问用queue.front(),并需要额外调用queue.pop()来删除“队头”元素
2)(dynamic median)STL中声明一个int元素的优先队列(缺省为最大堆)的方法:priority_queue<int> pq; 如果需要最小堆:priority_queue<int, vector<int>, greater<int> > pq; greater<int> 所在的头文件为<functional>
2. 输入输出格式:
(heavy transportation) 题意要求每个case结束之后单独输出一个空行,而样例并未体现这一点
3. 其他需要注意的地方:
(dynamic median/股票买卖)输入数据量较大,应使用scanf而不是cin,否则有可能超时
(polygon)注意 -1 % n (n为正整数) 仍为 -1

其他问题可以到提问板上提问或者直接找助教

全局题号
981
提交次数
383
尝试人数
165
通过人数
163