题意:由相邻的‘@’所组成的区域称为一块油田,问一共有多少块这样的油田?
Source Code
#include <iostream>
using namespace std;
const int N = 110;
char g[N][N];
int n,m;
int r[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{1,1},{-1,1},{1,-1}};
void bfs(int x, int y){
for(int i=0;i<8;i++){
if(x+r[i][0]>=0 && x+r[i][0]<n
&& y+r[i][1]>=0 && y+r[i][1]<m
&& g[x+r[i][0]][y+r[i][1]]=='@'){
g[x+r[i][0]][y+r[i][1]]='*';
bfs(x+r[i][0],y+r[i][1]);
}
}
}
int main(){
while(cin>>n>>m,n||m){
for(int i=0;i<n;i++){
cin>>g[i];
}
int ans = 0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(g[i][j]=='@'){
ans++;
g[i][j]='*';
bfs(i,j);
}
}
}
cout<<ans<<endl;
}
return 0;
}