poj3984

 1 #include <iostream>
 2 using namespace std;
 3 #define SIZE 5
 4 int Dx[4]={0,0,1,-1};
 5 int Dy[4]={1,-1,0,0};
 6 int maze[SIZE][SIZE];
 7 int map[SIZE][SIZE];
 8 int num=0;
 9 int minnum=1000000;
10 int minx[1000];
11 int miny[1000];
12 int tx[1000];
13 int ty[1000];
14 void migong(int x,int y);
15 
16 bool safe(int x,int y);
17 
18 int main()
19 {
20     for(int i=0;i<SIZE;i++)
21     {
22         for(int j=0;j<SIZE;j++)
23         {
24             cin >>maze[i][j];
25         }
26     }
27     for(int i=0;i<SIZE;i++)
28     {
29         for(int j=0;j<SIZE;j++)
30         {
31             map[i][j]=maze[i][j];
32         }
33     }
34     migong(0,0);
35     for(int i=0;i<=minnum;i++)
36     {
37         cout <<"("<<minx[i]<<", "<<miny[i]<<")"<<endl;
38     }
39     return 0;
40 }
41 
42 
43 void migong(int x,int y)
44 {
45     int mx;
46     int my;
47     tx[num]=x;
48     ty[num]=y;
49     if(x==4&&y==4)
50     {
51         if(num<minnum)
52         {
53             minnum=num;
54             int j=0;
55             for(j=0;j<=minnum;j++)
56             {
57                 minx[j]=tx[j];
58                 miny[j]=ty[j];
59             }
60             
61         }
62         
63         return;
64     }
65     for(int i=0;i<4;i++)
66     {
67         mx=x+Dx[i];
68         my=y+Dy[i];
69         
70         if(safe(mx,my)&&map[mx][my]!=2)
71         {
72             map[mx][my]=2;
73             num++;
74             migong(mx,my);
75             tx[num]=0;
76             ty[num]=0;
77             num--;
78             map[mx][my]=0;
79         }
80     }
81 }
82 
83 bool safe(int x,int y)
84 {
85     bool ret=true;
86     if(x<0||x>=SIZE||y<0||y>=SIZE||map[x][y]==1)
87         ret=false;
88     return ret;
89 }
90     

 

posted @ 2017-01-24 14:44  jintg  阅读(164)  评论(0)    收藏  举报