题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1241
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
while (scn.hasNext()) {
int height = Integer.parseInt(scn.next());
int width = Integer.parseInt(scn.next());
if (0 == height && 0 == width) {
break;
}
Search search = new Search(height, width);
for (int i = 0; i < height; ++i) {
search.setMatrixLine(i, scn.next().toCharArray());
}
search.beginSearch();
System.out.println(search.getCount());
}
scn.close();
}
}
class Search {
private final int[][] direction = { { -1, -1 }, { -1, 0 }, { -1, 1 },
{ 0, -1 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, { 1, 1 } };
private int height;
private int width;
private char[][] matrix;
private int count;
public Search(int height, int width) {
this.height = height;
this.width = width;
matrix = new char[height][width];
count = 0;
}
public void beginSearch() {
for (int i = 0; i < height; ++i) {
for (int j = 0; j < width; ++j) {
if ('@' == matrix[i][j]) {
dfs(i, j);
++count;
}
}
}
}
private void dfs(int x, int y) {
for (int k = 0; k < 8; ++k) {
int nextX = x + direction[k][0];
int nextY = y + direction[k][1];
if (0 <= nextX && nextX < height && 0 <= nextY && nextY < width
&& '@' == matrix[nextX][nextY]) {
matrix[nextX][nextY] = '*';
dfs(nextX, nextY);
}
}
}
public void setMatrixLine(int line, char[] ch) {
matrix[line] = ch;
}
public int getCount() {
return count;
}
}