标签: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