码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2488 A Knight's Journey _BFS

时间:2015-03-09 17:32:06      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #define CL(x, y) memset(x, y, sizeof(x))
 6 using namespace std;
 7 const int MAX = 28;
 8 int N, a, b, flag;
 9 int chessboard[MAX*MAX], used[MAX][MAX];
10 int Move[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};//此处知识改变了一下顺序,无过这样,就无语了,666666
11 void DFS(int x, int y, int z);
12 int main()
13 {
14     cin >> N;
15     for(int i = 1; i <= N; i++)
16     {
17         cin >> a >> b;
18         CL(used, 0);
19         CL(chessboard, 0);
20         flag = 0;
21         printf("Scenario #%d:\n", i);
22         DFS(1, 1, 1);
23         if(!flag)
24             cout << "impossible";
25         if(i!=N)
26             cout << endl << endl;
27     }
28 }
29 void DFS(int x, int y, int z)//z表示所走的步数
30 {
31     int i;
32     if(flag)
33         return;
34     used[x][y] = 1;
35     chessboard[z] = x * 10 + y;//此处用于记录新的坐标数, chessboard[][]的范围一定要注意
36     if(z == a*b)
37     {
38         for(i = 1; i <= z; i++)
39             printf("%c%d",chessboard[i]/10+A-1,chessboard[i]%10);
40         flag = 1;
41         return ;
42     }
43     for(i = 0; i < 8; i++)
44     {
45         int xx = x + Move[i][0];
46         int yy = y + Move[i][1];
47         if(xx>=1 && xx<=b && yy>=1 && yy<=a && !used[xx][yy])//此处a,b反过来,b:代表字母,a:代表数字
48         {
49             used[xx][yy] = 1;
50             DFS(xx,yy,z+1);
51             if(flag)
52                 return;
53             used[xx][yy] = 0;
54         }
55     }
56     return ;
57 }
View Code

通过一种方法记录位置,这个 方法是在很高明,(x,y)就是xy

POJ 2488 A Knight's Journey _BFS

标签:

原文地址:http://www.cnblogs.com/tyx0604/p/4324040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!