问题描述:一个骑士在棋盘中,给予其一个初始位置,求其是否能够走完整个棋盘。
骑士的走法和中国象棋的马走法相同,在前进过程中,骑士在其落足过的地方不能再次落足。
代码如下:
//骑士走棋盘问题,骑士的走法与象棋中马的走法相同,要求骑士便利棋盘中所有的点,但不能重复走一个点两次
//本题采用优先选择+回溯到方法进行,每次最先选择下一次能走路径最少的点
#include <iostream>
using namespace std;
#define MAX_SIZE 9
int nAlreayVisit = 0;
int nChessBoard[MAX_SIZE][MAX_SIZE]; //模拟棋盘状况,0表示没有被访问过
int ktmove1[8] = {-2, -1, 1, 2, 2, 1, -1, -2}; //可访问的各个点相对当前点位置
int ktmove2[8] = {1, 2, 2, 1, -1, -2, -2, -1};
//int nArray
void PrintChessBoard()
{
cout<<endl<<"已经访问的位置数目为:"<<nAlreayVisit<<endl;
for (int i = 0; i< MAX_SIZE; i++)
{
for (int j = 0; j < MAX_SIZE; j++)
{
cout<<nChessBoard[i][j]<<" ";
}
cout<<endl;
}
}
//测试该位置有多少个下一步的路径可选
int TestNextWay(int nTestX, int nTest