hdu2821
来源:互联网 发布:girl.cn 域名 价格 编辑:程序博客网 时间:2024/05/22 12:53
直接dfs
#include<cstdio> #include<cstring> #include<cctype> int n,m,num,cnt,a[35][35],dir[4][2]={0,-1,0,1,-1,0,1,0}; char map[35][35],p[]="LRUD",path[625]; int ok(int x,int y) { if(x<0||y<0||x>=n||y>=m) return 0; if(a[x][y]==0) return 1; return -1; } int dfs(int x,int y,int pos) { int i,xx,yy,tx,ty; for(i=0;i<4;i++) { xx=x+dir[i][0]; yy=y+dir[i][1]; if(ok(xx,yy)!=1) continue; do { xx+=dir[i][0]; yy+=dir[i][1]; }while(ok(xx,yy)==1); if(ok(xx,yy)&&ok(tx=xx+dir[i][0],ty=yy+dir[i][1])&&a[xx][yy]) { int t=a[xx][yy]; path[pos]=p[i]; if(t==1||a[tx][ty]) cnt--; if(cnt==0) { num=pos; return 1; } a[tx][ty]+=t-1; a[xx][yy]=0; if(dfs(xx,yy,pos+1)) return 1; a[xx][yy]=t; a[tx][ty]-=t-1; if(t==1||a[tx][ty]) cnt++; } } return 0; } int main() { while(~scanf("%d%d",&m,&n)) { int i,j,k,x,y,flag=1,f[35][35]={0}; for(i=num=0;i<n;i++) { scanf("%s",map[i]); for(j=0;j<m;j++) if(isalpha(map[i][j])) num++,a[i][j]=map[i][j]-'a'+1; else a[i][j]=0; } for(i=0;i<n&&flag;i++) for(j=0;j<m&&flag;j++) if(a[i][j]) for(k=0;k<4&&flag;k++) { x=i+dir[k][0]*2; y=j+dir[k][1]*2; if(ok(x,y)>0&&!f[x][y]) { f[x][y]=1; cnt=num; if(dfs(x,y,0)) flag=0; } } printf("%d\n%d\n",x,y); for(i=0;i<=num;i++) printf("%c",path[i]); puts(""); } }
0 0
- hdu2821
- hdu2821
- hdu2821
- hdu2821 Pusher
- hdu2821 Pusher 深搜
- HDU2821 Pusher(DFS)
- dfs pusher hdu2821
- HDU2821 Pusher HDU3500 Fling DFS搜索
- 主成分分析(PCA)
- C++智能指针
- linux下mysql的root密码忘记解决方案
- linux grep命令详解
- Ubuntu下su:authentication failure的解决办法
- hdu2821
- 大数据基础概论
- HEVC ME之 SAD分布图示意
- mappingDirectoryLocations
- 【华为oj2041】n个苹果放到m个盘子里
- 一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高。
- Visual C#类的定义及实现方法实例解析
- linux cut命令详解
- uiwebview与js交互