您的位置:首页 > 其它

hdu 1198 Farm Irrigation (并查集)

2013-08-08 17:01 429 查看
好纠结的一道题,我郁闷了!

我的循环从1开始结果不对,改成从0结果就对了!

郁闷!!!!!

好纠结啊!搞了好久!!!!

#include<stdio.h>

struct node

{

int a,b,c,d;

}ae[11]={{1,0,1,0},{1,0,0,1},{0,1,1,0},{0,1,0,1},{1,1,0,0},{0,0,1,1},{1,0,1,1},{1,1,1,0},

{0,1,1,1},{1,1,0,1},{1,1,1,1}};

int pre[50000];

int find(int k)

{

if(pre[k]==k)

return k;

pre[k]=find(pre[k]);

return pre[k];

}

char aaa[100][100];

int map[100][100];

int main()

{

int n,m,x,y,i,j,aa,bb,f1,f2,ans;

while(scanf("%d%d",&n,&m)!=EOF)

{

if(n==-1&&m==-1)

break;

for(i=0;i<n*m;i++)

pre[i]=i;

for(i=0;i<n;i++)

scanf("%s",aaa[i]);

for(i=0;i<n;i++)

for(j=0;j<m;j++)

map[i][j]=aaa[i][j]-'A';

for(i=0;i<n;i++)

for(j=0;j<m;j++)

{

x=i;y=j+1;

if(y<m)

{

if(ae[map[i][j]].d&&ae[map[x][y]].c)

{

aa=i*m+j;

bb=x*m+y;

f1=find(aa);

f2=find(bb);

if(f1!=f2)

pre[f1]=f2;

}

}

x=i+1;y=j;

if(x<n)

{

if(ae[map[i][j]].b&&ae[map[x][y]].a)

{

aa=i*m+j;

bb=x*m+y;

f1=find(aa);

f2=find(bb);

if(f1!=f2)

pre[f1]=f2;

}

}

}

ans=0;

for(i=0;i<n*m;i++)

{

if(pre[i]==i)

{

ans++;

}

}

printf("%d\n",ans);

}

return 0;

}

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: