标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others)
Total Submission(s): 956 Accepted Submission(s): 348
Special Judge
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<cstdlib> #include<algorithm> #include<queue> #include<vector> #include<stack> using namespace std; int n,m,sum; char s[30][30]; int map[30][30]; int dic[4][2]={{0,1},{0,-1},{-1,0},{1,0}}; char ss[4]={‘R‘,‘L‘,‘U‘,‘D‘},path[100010]; bool check(int x,int y) { if(x<0||y<0||x>=n||y>=m) return false; return true; } bool dfs(int x,int y ,int ret) { int xx,yy; if(ret==sum) { path[ret]=‘\0‘; return true; } for(int i=0;i<4;i++) { xx=x+dic[i][0],yy=y+dic[i][1]; if(map[xx][yy]||!check(xx,yy)) continue; while(!map[xx][yy]&&check(xx,yy)) { xx+=dic[i][0]; yy+=dic[i][1]; } if(!check(xx,yy)) continue; int cnt=map[xx][yy]; if(cnt>1&&!check(xx+dic[i][0],yy+dic[i][1])) continue; if(cnt>1) map[xx+dic[i][0]][yy+dic[i][1]]+=(cnt-1); map[xx][yy]=0; path[ret]=ss[i]; if(dfs(xx,yy,ret+1)) return true; map[xx+dic[i][0]][yy+dic[i][1]]-=(cnt-1); map[xx][yy]=cnt; } return false; } int main() { while(scanf("%d%d",&m,&n)!=EOF) { sum=0; for(int i=0;i<n;i++) { scanf("%s",s[i]); for(int j=0;j<m;j++) { if(s[i][j]==‘.‘) map[i][j]=0; else map[i][j]=s[i][j]-‘a‘+1; sum+=map[i][j]; } } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(map[i][j]==0) { if(dfs(i,j,0)) { printf("%d\n%d\n%s\n",i,j,path); i=n,j=m; } } } } } return 0; }
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4354460.html