Curling 2.0

http://poj.org/problem?id=3009

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 #define MAXN 101
 7 using namespace std;
 8 
 9 int a[MAXN][MAXN];
10 int move[][2]= {{1,0},{-1,0},{0,1},{0,-1}};
11 int n,m,sx,sy,ex,ey,ans;
12 
13 void dfs(int x,int y,int k)
14 {
15     int xx,yy;
16     if(k>=10||k>=ans) return;
17     for(int i=0; i<4; i++)
18     {
19         xx=x+move[i][0];
20         yy=y+move[i][1];
21         if(a[xx][yy]==1) continue;
22         while(1)
23         {
24             if(xx>=0&&xx<m&&yy>=0&&yy<n)
25             {
26                 if(a[xx][yy]==1)
27                 {
28                     a[xx][yy]=0;
29                     dfs(xx-move[i][0],yy-move[i][1],k+1);
30                     a[xx][yy]=1;
31                     break;
32                 }
33                 if(a[xx][yy]==3)
34                 {
35                     ans=min(ans,k+1);
36                     break;
37                 }
38             }
39             else if(!(xx>=0&&xx<m&&yy>=0&&yy<n)) break ;
40             xx=xx+move[i][0];
41             yy=yy+move[i][1];
42         }
43     }
44     return;
45 }
46 
47 int main()
48 {
49     while(scanf("%d%d",&n,&m)&&n&&m)
50     {
51         ans=11;
52         for(int i=0; i<m; i++)
53         {
54             for(int j=0; j<n; j++)
55             {
56                 scanf("%d",&a[i][j]);
57                 if(a[i][j]==2)
58                 {
59                     sx=i;
60                     sy=j;
61                 }
62             }
63         }
64         dfs(sx,sy,0);
65         if(ans==11) printf("-1\n");
66         else printf("%d\n",ans);
67     }
68     return 0;
69 }
View Code

 

posted @ 2013-08-27 10:41  null1019  阅读(240)  评论(0编辑  收藏  举报