您的位置:首页 > 其它

hdu 2821 dfs

2013-07-21 15:27 225 查看
以前就做过~~但是不知道怎么地 一直wa,,今天重新搞了一遍~~ 一直wa~~发现 只输入过程忘了~~r c~~

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,m;
int map[50][50];
int vis[50][50];
int xx[4]={0,1,0,-1};
int yy[4]={1,0,-1,0};
int sum;
int res[10000];
int judge(int nx,int ny)
{
if(nx>=n||nx<0||ny<0||ny>=m)
return 0;
else
return 1;
}
int dfs(int x,int y,int cur,int k)
{
if(cur==0)
return 1;
int i;
for(i=0;i<4;i++)
{
int nx=x+xx[i];
int ny=y+yy[i];
if(!judge(nx,ny))
continue;
if(map[nx][ny]!=0)
continue;
int flag=0;
while(map[nx][ny]==0)
{
nx=nx+xx[i];
ny=ny+yy[i];
if(!judge(nx,ny))
{
flag=1;
break;
}
}
if(flag)
continue;

if(!judge(nx+xx[i],ny+yy[i]))
{
if(map[nx][ny]>1)
{
continue;
}
else
{
res[k]=i;
map[nx][ny]=0;
if(dfs(nx,ny,cur-1,k+1))
return 1;
map[nx][ny]=1;
}
}
else
{
int t1=map[nx][ny];
int t2=map[nx+xx[i]][ny+yy[i]];
map[nx][ny]=0;
map[nx+xx[i]][ny+yy[i]]=t1+t2-1;
res[k]=i;
if(dfs(nx,ny,cur-1,k+1))
return 1;

map[nx][ny]=t1;
map[nx+xx[i]][ny+yy[i]]=t2;
}

}
return 0;
}

int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
int i,j;
char temp[50][50];
sum=0;
for(i=0;i<n;i++)
{
scanf("%s",temp[i]);
for(j=0;j<m;j++)
{
if(temp[i][j]=='.')
map[i][j]=0;
else
{
map[i][j]=temp[i][j]-'a'+1;
sum+=map[i][j];
}
}
}
memset(res,-1,sizeof(res));
int flag=0;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]==0)
{
if(dfs(i,j,sum,0))
{
flag=1;
break;
}
}
}
if(flag)
break;

}
printf("%d\n%d\n",i,j);
for(i=0;res[i]!=-1;i++)
{
if(res[i]==0)
printf("R");
else if(res[i]==1)
printf("D");
else if(res[i]==2)
printf("L");
else
printf("U");
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: