hdu 1241 Oil Deposits 深搜 Ac

YX_blog發表於2015-08-10
1241 hdu原連結處
package cn.hncu.start;

import java.util.Scanner;

public class p1241 {
		static int n,m;
		final static int b[][]={//因為題目要求連起來的才算一個,所以必須要把上下左右等八個座標表示出來
			{0,-1},
			{0,1},
			{-1,0},
			{1,0},
			{-1,-1},
			{-1,1},
			{1,-1},
			{1,1}
		};
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			 n=sc.nextInt();
			 m=sc.nextInt();
			 if(n==0&&m==0){
				 break;
			 }
			 
			 //字元收集
			char[][] a=new char[n][m];//存字元
			for(int i=0;i<n;i++){
				String str=sc.next();//先收取一行,然後後面單個解析
				 for(int j=0;j<m;j++){
					a[i][j]=str.charAt(j);//解析
				 }
			}
			int count=0;//用來統計有多少個
			for(int i=0;i<n;i++){
				for(int j=0;j<m;j++){
					if(a[i][j]=='@')//若滿足條件,開始進行深搜
					{
						dfs(a,i,j);
						count +=1;//一次深搜結束後,就能確定為一個油田
					}
				}
			}
			System.out.println(count);//輸出要求
		}
	}
	private static void dfs(char[][] a,int start, int end) {
			int x=0,y=0;
			for(int i=0;i<8;i++){
				x=start+b[i][0];//該座標點的x標和y座標開始遍歷,找出符合條件的
				y=end+b[i][1];
			
			if(x<n&&x>=0 && y>=0&&y<m && a[x][y]=='@'){//符合這個條件
				a[x][y]='*';//方便下次不去訪問;其實也可以用整數來表示,不過前面就需要在加陣列表示。
				dfs(a,x,y);
			}
<span style="white-space:pre">		</span>}
		}
	}
	

	

相關文章