Red and BlackTime
limit:2000/1000 MS (java/others) Memory limit:65536/32768 K (java/others)
Total submission (s): 11470 Accepted Submission (s): 7136
Problem Descriptionthere is a rectangular and covered with square tiles. Each tile is colored either red or black. A man was standing on a black tile. From a tiles, he can move to one of the four adjacent tiles. But he can ' t move on red tiles, and 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.
Inputthe input consists of multiple data sets. A data set starts with a line containing the positive integers W and H; W and H is the numbers of tiles in the X-and y-directions, respectively. W and H is not more than 20.
There is H more lines in the data set, and each of the 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)
Outputfor each data set, your program should output a line which contains the number of tiles he can reach from the Initia L tile (including itself).
Sample Input
6 9....#......#..............................#@...#.#. #.11 9.#..........#.#######. #.#.....#.. #.#.###.#.. #.#[email protected]#.#. #.#####.#.. #.......#.. #########............ 11 6..#. #.. #....#.. #.. #....#.. #.. ###.. #.. #.. #@...#.. #.. #....#.. #.. #.. 7 7..#.#....#.#. ###.###[email protected]###.###. #.#....#.#.. 0 0
Sample Output
4559613
Sourceasia 2004, Ehime (Japan), Japan Domestic
Recommendeddy | We have carefully selected several similar problems for you:1240 1175 1238 1026 1239 AC code
#include <stdio.h> #include <string.h>char map[22][22];int n,m,ans;int dx[4]={0,1,0,-1};int dy[4]={1,0,- 1,0};void dfs (int x,int y) {int i;ans++;map[x][y]= ' # '; for (i=0;i<4;i++) {int Tx=x+dx[i];int ty=y+dy[i];if (tx>=0 &&tx<n&&ty>=0&&ty<m&&map[tx][ty]== '. ') {DFS (tx,ty);}}} int main () {while (scanf ("%d%d", &m,&n)!=eof,n| | m) {int i,j,x,y;for (i=0;i<n;i++) {scanf ("%s", Map[i]), for (j=0;j<m;j++) {if (map[i][j]== ' @ ') {x=i;y=j;}}} Ans=0;dfs (x, y);p rintf ("%d\n", ans);}}
Hdoj topics 1312 Red and Black (DFS)