天天看點

P1596 [USACO10OCT]湖計數Lake Counting(dfs,洛谷,java)

洛谷連結:https://www.luogu.com.cn/problem/P1596

P1596 [USACO10OCT]湖計數Lake Counting(dfs,洛谷,java)
P1596 [USACO10OCT]湖計數Lake Counting(dfs,洛谷,java)
import java.util.Scanner;
public class Main {
	
	static int n=0,m=0,ans=0;
	static int[][] a=new int[1000][1000];
	static int[] dx={-1,1,0,0,-1,-1,1,1};
	static int[] dy={0,0,-1,1,-1,1,-1,1};
	
	public static void dfs(int x,int y) {
		a[x][y]=0;  //已經走過
		for(int i=0;i<8;i++) {
			int nx=x+dx[i];
			int ny=y+dy[i];
			
			if(a[nx][ny]==0 || nx<1 || nx>n || ny<1 || ny>m )  continue;  //傳回走下一個方向
			dfs(nx,ny);  //走
		}
	}
	
	public static void main(String[] args) {	
		Scanner in=new Scanner(System.in);
        n=in.nextInt();
        m=in.nextInt();
        
        for(int i=1;i<=n;i++) {
        	String s=in.next();
        	for(int j=1;j<=m;j++) {
        		char c=s.charAt(j-1);
        		if(c=='W') {
        			a[i][j]=1;
        		}else {
        			a[i][j]=0;
        		}
        	}
        }
        
        for(int i=1;i<=n;i++) {
        	for(int j=1;j<=m;j++) {
        		if(a[i][j]==1) {
        			//如果該點是水
        			dfs(i,j);
        			ans++;
        		}
        	}
        }
        System.out.println(ans);
	}
}