这道题太他妈操蛋了,就是一道简单的广搜,比赛的时候就是因为弄不清坐标的范围,导致最后没做出来。。。。耻辱啊!!!!
#include <iostream>
#include <queue>
using namespace std;
int map[10][10], visit[10][10];
int sx, sy, ex, ey;
int dir[8][2]={{-2,-1},{-1,-2},{1,-2},{2,-1},{-2,1},{-1,2},{1,2},{2,1}};
struct Point
{
int x, y;
int steps;
};
int main()
{
char str1, str2;
int digit1, digit2, flag, i;
while(cin>>str1>>digit1>>str2>>digit2)
{
sx = str1 - 'a' + 1;
sy = digit1;
ex = str2 - 'a' + 1;
ey = digit2;
// cout << sx << " " << sy << " " << ex << " " << ey << endl;
memset(visit,0,sizeof(visit));
queue<Point> myqueue;
while(!myqueue.empty())
{
myqueue.pop();
}
flag = 0;
Point temp, cur, Resultn;
temp.x = sx;
temp.y = sy;
temp.steps = 0;
Resultn.steps = 0;
visit[sx][sy] = 1;
myqueue.push(temp);
while(!myqueue.empty())
{
cur = myqueue.front();
if(cur.x == ex && cur.y == ey)
{
Resultn.steps = cur.steps;
flag = 1;
break;
}
myqueue.pop();
for(i = 0; i < 8; i++)
{
int X = cur.x + dir[i][0];
int Y = cur.y + dir[i][1];
if(X>0&&X<=8&&Y>0&&Y<=8&&visit[X][Y]==0)
{
visit[X][Y] = 1;
temp.x = X;
temp.y = Y;
temp.steps = cur.steps + 1;
myqueue.push(temp);
}
}
}
if(flag)
{
cout<<"To get from "<<str1<<digit1<<" to "<<str2<<digit2<<" takes "<<Resultn.steps<<" knight moves."<<endl;
}
}
return 0;
}
本文探讨了一个基于广度优先搜索算法解决迷宫问题的独特应用——骑士走法。通过实例分析,作者详细解释了如何利用广度优先搜索算法来找出骑士从起点到终点的最短路径。代码实现清晰,适合初学者理解和实践。
383





