题意:
一个8*8的正方形棋盘,行用a-h标记,列用1-8标记。
给定两个坐标,要求你从一个坐标到另一个坐标的最小步数。
移动和象棋中的马一样,走 “日” 字。
坑爹:
英文太难了,半天不知道走 “日” 字 ,真是我日啊。
解法:
广搜八个方向。
View Code
1 #include2 #include 3 using namespace std; 4 5 int map[8][2]={ { 2,1},{ 2,-1},{ 1,-2},{ 1,2},{-1,-2},{-1,2},{-2,1},{-2,-1}}; 6 int used[10][10]; 7 char c; 8 int starti; 9 int startj;10 char d;11 int overi;12 int overj;13 14 struct node15 {16 int x;17 int y;18 int rank;19 };20 21 void BFS()22 {23 queue Q;24 struct node a;25 a.x = starti;26 a.y = startj;27 a.rank = 0;28 used[a.x][a.y] = 1;29 Q.push(a);30 31 while(!Q.empty())32 {33 a = Q.front();34 Q.pop();35 36 int i;37 for(i = 0; i<8; i++)38 {39 node b;40 b.x = a.x + map[i][0];41 b.y = a.y + map[i][1];42 if(b.x>0 && b.x <=8 && b.y >0 && b.y<=8 && !used[b.x][b.y])43 {44 b.rank = a.rank + 1;45 used[b.x][b.y] = 1;46 Q.push(b); 47 if(b.x == overi && b.y == overj)48 {49 cout<<"To get from "< < <<" to "< < <<" takes "< <<" knight moves."<