马踏棋盘算法

#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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值