骑士能走这八个方向,公主在棋盘的某个位置,求骑士到公主的位置至少走几步?
Pos:x,y,count走的步数;
设置方向数组dx,dy;
BFS广度优先,利用队列遍历每一个点
#include<iostream>
#include<queue>
#define N 7
using namespace std;
class Pos
{
public:
int x;
int y;
int count;
Pos(int xx,int yy,int cc):x(xx),y(yy),count(cc){}
};
//方向数组
int dx[8] = { -1,-2,-2,-1,1,2,2,1 };
int dy[8] = { -2,-1,1,2,-2,-1,1,2 };
int BFS_MOVE(int beginx, int beginy, int endx, int endy, int n)
{
int flag[N][N] = { 0 };
queue<Pos> qq;
Pos p(beginx, beginy, 0);
qq.push(p);//层序遍历
flag[beginx][beginy] = 1;
while (!qq.empty())
{
p = qq.front();
qq.pop();
if (p.x == endx && p.y == endy)return p.count;//找到返回
for (int i = 0; i <= N; i++)//遍历每个点
{
int newx = dx[i] + p.x;
int newy = dy[i] + p.y;
if (newx<0 || newx>N || newy<0 || newy>N)continue;
qq.push(Pos(newx, newy, p.count+1));
}
}
return -1;
}
int main()
{
cout<<BFS_MOVE(3, 3, 3, 5, 7) << endl;//骑士在(3,3)公主在(3,5),棋盘大小是7*7
}