POJ1979 Java
做POJ1979 Red and Black(http://poj.org/problem?id=1979),题意如下:
一个大小为WH的矩形房间内,地上铺了红色与黑色两种正方形的瓷砖,瓷砖大小为11,初始时刻,你站在一个黑色瓷砖上,只能向上下左右四个方向相邻的黑色瓷砖移动。给出房间的描述和你的初始位置,用“#”表示红色瓷砖,用“.”表示黑色瓷砖,用字符“@”表示初始时你所在的黑色瓷砖,求出你所能到达的黑色瓷砖块数。 输入:第一行给出两个整数W和H分别表示地面的长度和宽度,接下来有W行,每一行有H列,其中“#”表示红色瓷砖,“.”表示黑色瓷砖块数, “@”表示初始时你所在的黑色瓷砖。最后一行0 0表示输入结束。 输出:一个整数,表示你所能到达的黑色瓷砖块数。 要求使用递归,输入与输出必须严格按照题目给定格式,在线提交,只有提交结果返回Accept才算正确完成。
import java.util.Scanner;
public class Main {
static char[][] A;
static int sum;//黑可以路过的数
static int W;//宽
static int H;//高
// dir1 dir2 组成上下左右
static int[] dir1 = { -1, 0, 0, 1 };
static int[] dir2 = { 0, -1, 1, 0 };
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (true) {
H = in.nextInt();
W = in.nextInt();
if (H == 0)
break;
in.nextLine();
A = new char[H][W];
int x = 0, y = 0;
// for (int i = 0; i < W; i++) {
// for (int j = 0; j < H; j++) {
// char c = in.next().charAt(0);
// if (c == '@') {
// x = i;
// y = j;
// }
// A[i][j] = c;
// }
// }
// 用循环把字符输入
for (int i = 0; i < H; i++) {
String string = in.nextLine();
if (string.contains("@")) {
x = i;
while (string.charAt(y) != '@')
y++;
}
A[i] = string.toCharArray();
}
sum = 0;
Sum(x, y);//进入
System.out.println(sum);
}
}
private static void Sum(int sx, int sy) {
A[sx][sy] = '#';
sum++;
for (int j = 0; j <= 3; j++) {
//上下左右
int x = sx + dir1[j];
int y = sy + dir2[j];
if (x >= 0 && x < H && y >= 0 && y < W && A[x][y] == '.')
Sum(x, y);
}
}
}