Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=2821

dfs

我的代码
 1 #include <stdio.h>
2 const int N=30;
3 const char dd[10]="RDLU";
4 const int dx[4]={0,1,0,-1};
5 const int dy[4]={1,0,-1,0};
6 char maze[N][N],dir[1000];
7 int n,m,flag,s;
8 bool inmaze(int x,int y)
9 {
10 return (0<=x && x<n && 0<=y && y<m);
11 }
12 void dfs(int x,int y,int p)
13 {
14 int nx,ny,t;
15 if (p>=s) {dir[p]=0; flag=1; return;}
16 for (int d=0;d<4;d++)
17 {
18 nx=x+dx[d]; ny=y+dy[d];
19 if (!inmaze(nx,ny) || maze[nx][ny]) continue;
20 while (inmaze(nx,ny) && !maze[nx][ny]) nx+=dx[d],ny+=dy[d];
21 if (!inmaze(nx+dx[d],ny+dy[d])) continue;
22 t=maze[nx][ny];
23 maze[nx+dx[d]][ny+dy[d]]+=t-1; maze[nx][ny]=0;
24 dir[p]=dd[d];
25 dfs(nx,ny,p+1);
26 if (flag) return;
27 maze[nx+dx[d]][ny+dy[d]]-=t-1; maze[nx][ny]=t;
28 }
29 }
30 int main()
31 {
32 while (~scanf("%d%d",&m,&n))
33 {
34 flag=s=0;
35 int i,j;
36 for (i=0;i<n;i++)
37 {
38 scanf("%s",maze[i]);
39 for (j=0;j<m;j++)
40 {
41 if (maze[i][j]=='.') maze[i][j]=0;
42 else maze[i][j]-='a'-1;
43 s+=maze[i][j];
44 }
45 }
46 for (i=0;i<n;i++) if (!flag)
47 for (j=0;j<m;j++)
48 {
49 dfs(i,j,0);
50 if (flag)
51 {
52 printf("%d\n%d\n",i,j);
53 puts(dir);
54 break;
55 }
56 }
57 }
58 }

 

posted on 2011-12-25 17:04  Qiuqiqiu  阅读(260)  评论(0编辑  收藏  举报