ACM HDOJ 1241 (Oil Deposits)

来源:互联网 发布:美女图片源码 编辑:程序博客网 时间:2024/06/07 03:39

题目链接 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;}}

 

0 0