本文主要是介绍Farm Irrigation HDU - 1198,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击打开链接
没什么道道 就是麻烦 要仔细
看每个块是什么类型 又能和什么类型的块相连 预处理一下即可
#include <bits/stdc++.h>
using namespace std;struct node
{int dir[4];
};node per[11];
int mp[100][100];
int f[5000];
int n,m;void init();
void calculate();
void unite(int u,int v);
int getf(int p);int main()
{int k;int i,j,sum;char ch[100];init();while(scanf("%d%d",&n,&m)!=EOF){if(n<0||m<0) break;for(i=1;i<=n;i++){scanf("%s",ch);for(j=0;j<m;j++){mp[i][j+1]=ch[j]-'A';}}for(i=1;i<=n*m;i++){f[i]=i;}calculate();sum=0;for(i=1;i<=n*m;i++){if(f[i]==i) sum++;}printf("%d\n",sum);}return 0;
}void init()
{per[0].dir[0]=1, per[0].dir[1]=1, per[0].dir[2]=0, per[0].dir[3]=0;per[1].dir[0]=0, per[1].dir[1]=1, per[1].dir[2]=1, per[1].dir[3]=0;per[2].dir[0]=1, per[2].dir[1]=0, per[2].dir[2]=0, per[2].dir[3]=1;per[3].dir[0]=0, per[3].dir[1]=0, per[3].dir[2]=1, per[3].dir[3]=1;per[4].dir[0]=0, per[4].dir[1]=1, per[4].dir[2]=0, per[4].dir[3]=1;per[5].dir[0]=1, per[5].dir[1]=0, per[5].dir[2]=1, per[5].dir[3]=0;per[6].dir[0]=1, per[6].dir[1]=1, per[6].dir[2]=1, per[6].dir[3]=0;per[7].dir[0]=1, per[7].dir[1]=1, per[7].dir[2]=0, per[7].dir[3]=1;per[8].dir[0]=1, per[8].dir[1]=0, per[8].dir[2]=1, per[8].dir[3]=1;per[9].dir[0]=0, per[9].dir[1]=1, per[9].dir[2]=1, per[9].dir[3]=1;per[10].dir[0]=1, per[10].dir[1]=1, per[10].dir[2]=1, per[10].dir[3]=1;return;
}void calculate()
{int next[4][2]={0,-1,-1,0,0,1,1,0};int i,j,k,tx,ty;for(i=1;i<=n;i++){for(j=1;j<=m;j++){for(k=0;k<4;k++){tx=i+next[k][0];ty=j+next[k][1];if(1<=tx&&tx<=n&&1<=ty&&ty<=m){//printf(" ***%d %d %c %c %d %d*** ",k,(k+2)%2,mp[tx][ty]+'A',mp[i][j]+'A',per[mp[tx][ty]].dir[(k+2)%2],per[mp[i][j]].dir[k]);if(per[mp[tx][ty]].dir[(k+2)%4]&&per[mp[i][j]].dir[k]){unite((tx-1)*m+ty,(i-1)*m+j);}}}}//printf("\n");}return;
}void unite(int u,int v)
{int fu,fv;fu=getf(u);fv=getf(v);if(fu!=fv){f[fv]=fu;}return;
}int getf(int p)
{if(f[p]==p) return p;else{f[p]=getf(f[p]);return f[p];}
}
这篇关于Farm Irrigation HDU - 1198的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!