题目大意:从@出发能到达多少个点。
public class SimDFS {
//定义走法
public static int[][] Dxy={{0,-1}, {0, 1}, {1, 0}, {-1, 0}};
public static final int MAX = 20;
public static int col;
public static int row;
public static char[][] maze = new char[MAX][MAX];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
col = scanner.nextInt();
row = scanner.nextInt();
int x=0,y=0;
while(col!=0&&row!=0){
int ans = 1;//起点自带一个
for(int i = 0; i < row ;++i){
String temp = scanner.next();
for(int j = 0 ; j < col;++j){
char s =temp.charAt(j);
maze[i][j] = s;
if(s=='@'){
x = j;
y = i;
}
}
}
ans += dfs(x,y);
System.out.println(ans);
col = scanner.nextInt();
row = scanner.nextInt();
}
}
private static int dfs(int x, int y) {
int ans = 0 ;
for(int d = 0; d < 4; ++d ){
int new_x = x + Dxy[d][0];//上下右左
int new_y = y + Dxy[d][1];
if(new_x >= 0&& new_y >= 0&& new_x < col && new_y < row && maze[new_y][new_x]=='.'){
maze[new_y][new_x] = '#';//改变走过的位置
ans += 1 + dfs(new_x,new_y);
}
}
return ans;
}
}