HDU 2821 Pusher
2015-03-15 11:43
387 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2821
代码如下
代码如下
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; struct point{ int x,y; }S; int r,c; int xx[4]={1,0,-1,0}; int yy[4]={0,1,0,-1}; int _map[30][30]; int sum; int vis[30][30]; int route[1000],um;//记录路径 bool judge(point h){//判断是否在图内 if(h.x>=0 && h.x<r && h.y>=0 && h.y<c) return true; return false; } bool gohead(point &h,int a){//一直往前走,若能碰到箱子,返回true,否则返回false;同时h变为箱子前一个位置 bool tag=false; point next; next.x=h.x+xx[a]; next.y=h.y+yy[a]; while(judge(next)){ if(_map[next.x][next.y]) tag=true; h=next; next.x=h.x+xx[a]; next.y=h.y+yy[a]; if(tag) break; } if(tag) return true; return false; } bool DFS(point s){ if(sum == 0){ return true; } for(int i=0;i<4;i++){ point t; int xi=t.x=s.x+xx[i]; int yi=t.y=s.y+yy[i]; if(judge(t) && !_map[xi][yi] && gohead(t, i)){ int tmp=_map[t.x][t.y]; _map[t.x+xx[i]][t.y+yy[i]]=_map[t.x+xx[i]][t.y+yy[i]]+(tmp-1); _map[t.x][t.y]=0; sum--; route[um++]=i; if(DFS(t)) return true; sum++; um--; _map[t.x][t.y]=tmp; _map[t.x+xx[i]][t.y+yy[i]]=_map[t.x+xx[i]][t.y+yy[i]]-(tmp-1); } } return false; } int main(){ while(~scanf("%d%d",&c,&r)){ getchar(); memset(_map,0,sizeof(_map)); sum=0; for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ char tt; scanf("%c",&tt); if(tt>='a'&&tt<='z'){ _map[i][j]=tt-'a'+1; sum+=_map[i][j]; } } getchar(); } bool tag=false; for(int i=0;i<r;i++){//对地图全部每个点dfs for(int j=0;j<c;j++){ S.x=i; S.y=j; um=0; if(_map[S.x][S.y]) continue; if(DFS(S)){ tag=true; break; } } if(tag) break; } if(tag){ printf("%d\n%d\n",S.x,S.y); for(int i=0;i<um;i++){ if(route[i]==0) printf("D"); else if(route[i]==1) printf("R"); else if(route[i]==2) printf("U"); else printf("L"); } } printf("\n"); } return 0; }
相关文章推荐
- hdu 2821 Pusher(dfs)
- HDU-2821-Pusher(DFS)
- DFS-hdu-2821-Pusher
- hdu 2821 Pusher (dfs)
- hdu 2821 Pusher (dfs)
- hdu 2821 pusher 4.3.7
- DFS-hdu-2821-Pusher
- HDU 2821 Pusher
- HDU 2821 Pusher
- hdu 2821 Pusher 附几组数据
- HDU 2821 Pusher
- HDU 2821 Pusher
- HDU 2821 Pusher
- hdu 2821 Pusher (dfs)
- Problem U:Pusher(HDU 2821)
- HDU 2821--Pusher
- hdu 2821 Pusher (dfs)
- HDU 2821 Pusher
- hdu 2821(dfs)
- (HDU 2821)Pusher DFS + 在一个方向上可以移动多位