Oil Deposits

链接

[http://poj.org/problem?id=1562]

题意

求联通块数量

分析

DFS

代码

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
const int N=110;
char a[N][N];
int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int n,m;
void dfs(int x,int y){
	a[x][y]='*';//避免重复 
	for(int i=0;i<8;i++){
		int x2=x+d[i][0];
		int y2=y+d[i][1];
		if(x2<0||x2>=n||y2<0||y2>=m) continue;
		if(a[x2][y2]=='@')
		dfs(x2,y2);
	}
}
int main(){
	//freopen("in.txt","r",stdin);
     while(cin>>n>>m&&(n+m)){
     	for(int i=0;i<n;i++)
     	scanf("%s",a[i]);
     	int sum=0;
     	for(int i=0;i<n;i++)
     	for(int j=0;j<m;j++)
     	{
     		if(a[i][j]=='@'){
     			dfs(i,j); sum++;
			 }
		 }
		 cout<<sum<<endl;
	 }
	return 0;
} 
posted @ 2018-12-05 14:56  ChunhaoMo  阅读(82)  评论(0编辑  收藏  举报