这个题就是说以@代表油田,它周边8个方向若有@则表示同一个油田。给你一个图,问你图中有多少个油田。
//此题求独立子图的个数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node{
int x;
int y;
};
struct node queue[10005];
int head;
int tail;
int book[101][101];
char map[101][101];
int n,m;//图的规模
int next[8][2]={{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}};//此题遍历八个方向
int main()
{
while(scanf("%d%d",&n,&m)!=EOF&&n){
int count=0;//独立子图的个数
memset(book,0,sizeof(book));
for(int i=1;i<=n;i++)
scanf("%s",map[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(book[i][j]==0&&map[i][j]=='@'){//此题相当于求独立子图的个数
count++;
head=0;
tail=0;
book[i][j]=1;
queue[tail].x=i;
queue[tail].y=j;
tail++;
while(head<tail){
for(int t=0;t<=8;t++){
int xnext=queue[head].x+next[t][0];
int ynext=queue[head].y+next[t][1];
if(xnext>=1&&xnext<=n&&ynext>=1&&ynext<=m&&book[xnext][ynext]==0&&map[xnext][ynext]=='@'){
book[xnext][ynext]=1;
queue[tail].x=xnext;
queue[tail].y=ynext;
tail++;
}
}
head++;
}
}
}
printf("%d\n",count);
}
return 0;
}