Problem 1160 : How Many Islands?
Javaで組む始めてのDFS。ACだったけど後で見直すと初期化してない部分があった。通ったのは多分入力が甘かったから。
import java.util.*; class Main { static int map[][] = new int[55][55]; static int dx[] = {1,1,0,-1,-1,-1,0,1}; static int dy[] = {0,1,1,1,0,-1,-1,-1}; public static void main(String args[]){ Scanner in = new Scanner(System.in); while(true){ int w = in.nextInt(), h = in.nextInt(); if(w==0) return ; //以下3行を追加 for(int i=0; i<55; i++) for(int j=0; j<55; j++) map[i][j] = 0; for(int i=1; i<=h; i++) for(int j=1; j<=w;j++) map[i][j] = in.nextInt(); int ans = 0; for(int i=1; i<=h; i++) for(int j=1; j<=w; j++) if(map[i][j] == 1){ ans++; dfs(i,j); } System.out.println(ans); } } private static void dfs(int x, int y){ if(map[x][y] != 1) return ; map[x][y] = 0; for(int i=0; i<8; i++){ dfs(x+dx[i], y+dy[i]); } } }