入队11-HDU-1312

[NWPU]萌新寒假第二次比赛——大学生专场
B-Red and Black

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
思路:本题可用深搜求解,输入地图时就可以进行判断,在输入结束前找到@,
当前@位置开始递归,写一个dfs函数,里面包括上下左右
四个方向,每次调用dfs时计数器sum++并将当前位置的黑块或@变成红块,算是标记
已遍历过,省去了used数组用作标记数组。判断是否可以移动的条件是1.不越界
 2.未遍历 3.是黑块 。最好写一个方向的二维数组,就可以通过for循环变换方向,
注意输入的先是列再是行。

猜你喜欢

转载自blog.csdn.net/irving0323/article/details/81064694