深度優先搜索解決 踏青問題 java實現

題目如下 :

     

本題用深度優先搜索能很容易的解決,首先,定義一個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]);
			}
		}
	}

}

結果如下:

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章