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;
}