#include<iostream>
using namespace std;
#define X 6
#define Y 6
int chess[X][Y] = { 0 };
bool visited[X][Y] = { 0 };
typedef struct state
{
int x;
int y;
}STATE;
STATE state[8] = //用来描述8个状态的切换
{
{ 1, 2 },
{ 1, -2 },
{ -1, 2 },
{ -1, -2 },
{ 2, 1 },
{ 2, -1 },
{ -2, 1 },
{ -2, - 1 },
};
bool HorseChesss(int x, int y, int tag = 1)
{
if(X * Y == tag)
{
return true;
}
chess[x][y] = tag;//初始化第一个位置为第一步
visited[x][y] = true;
bool result = false;
for(int i = 0; i < 8; i++) //遍历所有状态
{
if(x + state[i].x < X && x + state[i].x >=0 && y + state[i].y < Y && y + state[i].y >= 0 && visited[x + state[i].x][y + state[i].y] == false) //如果该状态满足条件
{
visited[x + state[i].x][y + state[i].y] = true; //把该节点设置为已访问
chess[x + state[i].x][y + state[i].y] = tag + 1; //记录步数
result = HorseChesss(x + state[i].x, y + state[i].y, tag + 1); //递归进入下一层
if(result) //如果反馈回来的结果是已找到走法
{
break; //停止遍历
}
visited[x + state[i].x][y + state[i].y] = false;
}
}
return result; //返回是否找到最终走法
}
int main()
{
HorseChesss(2, 0);
for (int i = 0; i < X; i++)
{
for (int j = 0; j < Y; j++)
{
cout << chess[i][j] << '\t';
}
cout << endl;
}
system("pause");
}
马踏棋盘算法
最新推荐文章于 2024-04-13 16:14:34 发布