标签:des style http color java os io strong
2 2 DK HF 3 3 ADC FJK IHE -1 -1
2 3
用深搜做的,一次深搜一个还没搜过格子,把和它连通的格子都标记,搜索次数就是答案。
貌似我的代码老长了,网上代码都很短。。。继续努力!!
#include"stdio.h" #include"string.h" #include"vector" #include"algorithm" using namespace std; #define N 55 #define LL __int64 char g[N][N]; int n,m,vis[N][N]; int judge(int x,int y) { if(x>=0&&x<n&&y>=0&&y<m&&!vis[x][y]) return 1; return 0; } int down(int i,int j) //判断当前管子下面有没有接口 { if(g[i][j]=='C'||g[i][j]=='D'||g[i][j]=='E'||g[i][j]=='H'||g[i][j]=='I'||g[i][j]=='J'||g[i][j]=='K') return 1; return 0; } int up(int i,int j) //判断当前管子上面有没有接口 { if(g[i][j]=='A'||g[i][j]=='B'||g[i][j]=='E'||g[i][j]=='G'||g[i][j]=='H'||g[i][j]=='J'||g[i][j]=='K') return 1; return 0; } int left(int i,int j) { if(g[i][j]=='A'||g[i][j]=='C'||g[i][j]=='F'||g[i][j]=='G'||g[i][j]=='H'||g[i][j]=='I'||g[i][j]=='K') return 1; return 0; } int right(int i,int j) { if(g[i][j]=='B'||g[i][j]=='D'||g[i][j]=='F'||g[i][j]=='G'||g[i][j]=='I'||g[i][j]=='J'||g[i][j]=='K') return 1; return 0; } void dfs(int x,int y) { vis[x][y]=1; if(g[x][y]=='A') { if(judge(x-1,y)&&down(x-1,y)) dfs(x-1,y); if(judge(x,y-1)&&right(x,y-1)) dfs(x,y-1); } else if(g[x][y]=='B') { if(judge(x-1,y)&&down(x-1,y)) dfs(x-1,y); if(judge(x,y+1)&&left(x,y+1)) dfs(x,y+1); } else if(g[x][y]=='C') { if(judge(x+1,y)&&up(x+1,y)) dfs(x+1,y); if(judge(x,y-1)&&right(x,y-1)) dfs(x,y-1); } else if(g[x][y]=='D') { if(judge(x+1,y)&&up(x+1,y)) dfs(x+1,y); if(judge(x,y+1)&&left(x,y+1)) dfs(x,y+1); } else if(g[x][y]=='E') { if(judge(x+1,y)&&up(x+1,y)) dfs(x+1,y); if(judge(x-1,y)&&down(x-1,y)) dfs(x-1,y); } else if(g[x][y]=='F') { if(judge(x,y+1)&&left(x,y+1)) dfs(x,y+1); if(judge(x,y-1)&&right(x,y-1)) dfs(x,y-1); } else if(g[x][y]=='G') { if(judge(x-1,y)&&down(x-1,y)) dfs(x-1,y); if(judge(x,y+1)&&left(x,y+1)) dfs(x,y+1); if(judge(x,y-1)&&right(x,y-1)) dfs(x,y-1); } else if(g[x][y]=='H') { if(judge(x+1,y)&&up(x+1,y)) dfs(x+1,y); if(judge(x-1,y)&&down(x-1,y)) dfs(x-1,y); if(judge(x,y-1)&&right(x,y-1)) dfs(x,y-1); } else if(g[x][y]=='I') { if(judge(x,y+1)&&left(x,y+1)) dfs(x,y+1); if(judge(x,y-1)&&right(x,y-1)) dfs(x,y-1); if(judge(x+1,y)&&up(x+1,y)) dfs(x+1,y); } else if(g[x][y]=='J') { if(judge(x+1,y)&&up(x+1,y)) dfs(x+1,y); if(judge(x-1,y)&&down(x-1,y)) dfs(x-1,y); if(judge(x,y+1)&&left(x,y+1)) dfs(x,y+1); } else if(g[x][y]=='K') { if(judge(x+1,y)&&up(x+1,y)) dfs(x+1,y); if(judge(x-1,y)&&down(x-1,y)) dfs(x-1,y); if(judge(x,y+1)&&left(x,y+1)) dfs(x,y+1); if(judge(x,y-1)&&right(x,y-1)) dfs(x,y-1); } } int main() { int i,j; while(scanf("%d%d",&n,&m),n!=-1||m!=-1) { for(i=0;i<n;i++) scanf("%s",g[i]); int ans=0; memset(vis,0,sizeof(vis)); for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(!vis[i][j]) { dfs(i,j); ans++; } } } printf("%d\n",ans); } return 0; }
hdu 1198 Farm Irrigation (搜索或并查集),布布扣,bubuko.com
hdu 1198 Farm Irrigation (搜索或并查集)
标签:des style http color java os io strong
原文地址:http://blog.csdn.net/u011721440/article/details/38563771