Red and Black
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4374 Accepted Submission(s): 2845
Write a program to count the number of black tiles which he can reach by repeating the moves described above.
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)
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
45 59 6 13
import java.util.Scanner;
public class Main {
static int px[]={0,1,0,-1};
static int py[]={1,0,-1,0};
static int t;
static public void DFS(int i,int j,char a[][],boolean b[][],int m,int n){
int k,x,y;
b[i][j]=true;
t++;
for(k=0;k<4;k++){
x=i+px[k];
y=j+py[k];
if(x>=0&&x<m&&y>=0&&y<n){
if(a[x][y]!='#'&&b[x][y]==false){
DFS(x,y,a,b,m,n);
}
}
}
}
public static void main(String[] args) {
int m,n,i,j,x1=0,x2=0;
Scanner oo=new Scanner(System.in);
while(oo.hasNext()){
n=oo.nextInt();
m=oo.nextInt();
if(m==0&&n==0){break;}
String s;
char a[][]=new char[m][n];
for(i=0;i<m;i++){
s=oo.next();
for(j=0;j<n;j++){
a[i][j]=s.charAt(j);
if(a[i][j]=='@'){
x1=i;x2=j;
}
}
}
t=0;
boolean b[][]=new boolean[m][n];
DFS(x1,x2,a,b,m,n);
System.out.println(t);
}
}
}