心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
图的连通性问题,我用的是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==0return 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)  编辑 收藏 引用 所属分类: 题目分类:图论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理