題目如下 :
本題用深度優先搜索能很容易的解決,首先,定義一個char類型二維數組保存地圖,爲了防止在判斷的時候報arrayindexoutofbound錯誤我故意多放了兩行兩列,賦值爲'?',代表邊界,然後從最開始的位置開始遍歷這個地圖,每當遍歷到草叢的時候就用搜索將這個草叢能夠直到達的草叢設置爲'!'代表已經有人能夠到達這個草叢了,搜索完成之後result+1,代表這塊草地需要一個人,就這麼遍歷到最後一塊的時候,就得到了所需要的人數。
代碼如下:
import java.util.*;
public class DFSsearchPeople {
static char[][] datas = null;
static int[][] move = {{0,1},{1,0},{-1,0},{0,-1}};
static int result = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n=sc.nextInt(),m=sc.nextInt();
datas = new char[n+2][m+2];
String temp = null;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
datas[i][j] = '?';
}
}
for(int i=1;i<=n;i++){
temp = sc.next();
for(int j=1;j<=m;j++){
datas[i][j] = temp.charAt(j-1);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(datas[i][j] == '#'){
dfs(i,j);
result+=1;
}
}
}
System.out.print(result);
}
public static void dfs(int x,int y){ //搜索這個位置,將這個位置能到達的草叢全部設置爲'!'表示有人能夠到達了。
datas[x][y] = '!';
for(int i=0;i<4;i++){
if(datas[x+move[i][0]][y+move[i][1]] == '#'){
dfs(x+move[i][0],y+move[i][1]);
}
}
}
}
結果如下: