Red and Black
Time limit:2000/1000 MS (java/others) Memory limit:65536/32768 K (java/others)
Total submission (s): 12138 Accepted Submission (s): 7554
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 Lin E which contains the number of tiles he can reach from the initial tile (including itself). Sample Input Sample Output45 59 6 13
1#include <iostream>2#include <cstdio>3 using namespacestd;4 Chara[ +][ +];5 intM,n;6 intCount=0;7 voidDfsintXinty)8 {9 if(a[x][y]=='.'&&x<n&&x>=0&&y<m&&y>=0)Ten { Onecount++; Aa[x][y]='#'; -DFS (x+1, y); -DFS (x,y+1); theDFS (x,y-1); -DFS (X-1, y); - } - } + intMain () - { +Freopen ("In.txt","R", stdin); A while(SCANF ("%d%d", &m,&n) &&m!=0&&n!=0) at { -Count=0; - inti,j,x,y; - for(i=0; i<n;i++) - { - for(j=0; j<m;j++) in { -Cin>>A[i][j]; to if(a[i][j]=='@') + { -x=i;y=J; the } * } $ }Panax Notoginsenga[x][y]='.'; - dfs (x, y); thecout<<count<<Endl; + } A}
Red and Black (water)