您的位置:首页 > 其它

POJ2386 Lake Counting 图的遍历

2014-12-20 22:41 162 查看
题目大意:有一个N*M的矩阵,W表示陆地,连接方向为8个方向,问总共有多少个岛屿

题解,直接用BFS遍历图即可统计出

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
const int maxn=110;
char s[maxn];
int a[maxn][maxn],q[maxn*maxn][2],m,n;
int d[8][2]={{0,1},{1,0},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
void bfs(int x,int y){
int i,j,k,f,l;
int u,v;
f=0;l=1;
q[1][0]=x;
q[1][1]=y;
a[x][y]=0;
while(f<l){
f++;
u=q[f][0];v=q[f][1];
for(i=0;i<8;i++)
if(a[u+d[i][0]][v+d[i][1]]){
l++;
q[l][0]=u+d[i][0];
q[l][1]=v+d[i][1];
a[q[l][0]][q[l][1]]=0;
}
}
}

int main(){
int i,j,k,ans=0;
char c;
scanf("%d%d",&n,&m);
c=getchar();
for(i=1;i<=n;i++){
gets(s);
for(j=0;j<m;j++)
if(s[j]=='W')
a[i][j+1]=1;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]){
ans++;
bfs(i,j);
}
printf("%d\n",ans);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: