图的连通性问题,我用的是dfs,如果bfs的话需要建队列,比较麻烦,也没有必要。
以下是我的代码:
#include<stdio.h>
#include<string.h>
const long maxn=108;
long m,n,ans,xd[]={-1,-1,0,1,1,1,0,-1},yd[]={0,1,1,1,0,-1,-1,-1};
char a[maxn][maxn];
bool used[maxn][maxn];
void dfs(long x,long y)
{
used[x][y]=true;
for(long k=0;k<8;k++)
{
long xx=x+xd[k],yy=y+yd[k];
if(xx>=1&&xx<=m&&yy>=1&&yy<=n&&!used[xx][yy]&&a[xx][yy]=='@')
dfs(xx,yy);
}
}
int main()
{
/*
freopen("program.in","r",stdin);
freopen("program.out","w",stdout);
//*/
while(scanf("%ld%ld",&m,&n)==2)
{
if(m==0||n==0) return 0;
getchar();
memset(a,0,sizeof(a));
memset(used,false,sizeof(used));
// Clear
for(long i=1;i<=m;i++)
{
for(long j=1;j<=n;j++)
scanf("%c",&a[i][j]);
getchar();
}
// Read In
ans=0;
for(long i=1;i<=m;i++)
for(long j=1;j<=n;j++)
if(!used[i][j]&&a[i][j]=='@')
{
dfs(i,j);
ans++;
}
printf("%ld\n",ans);
}
return 0;
}
posted on 2010-01-07 13:39
lee1r 阅读(373)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:图论