#include <iostream>
using namespace std;
#include "SqStack.h"
struct PosType //马的坐标位置类型
{
int m_row; //行值
int m_col; //列值
};
struct DataType //栈的元素类型
{
PosType seat; //马在棋盘中的“坐标位置”
int di; //换方向的次数
};
class chess
{
public:
chess();
bool chessPath(PosType);
void Print();
private:
PosType NextPos(PosType c , int d );
int m_chess[8][8]; // 棋盘数组
};
chess::chess()
{
int i,j;
for(i=0;i<=7;i++)
for(j=0;j<=7;j++)
m_chess[i][j]=0;
PosType direct[8]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
}
bool chess::chessPath(PosType start)
{
SqStack<DataType> path(64); //创建栈
PosType curpos;
DataType e;
curpos=start ;
int curstep=1; //第几次走的位置
do{
if(curpos.m_row<=7 && curpos.m_row>=0 &&
curpos.m_col>=0 && curpos.m_col<=7)//走在棋盘之内
{ if(m_chess[curpos.m_row][curpos.m_col]==0){
m_chess[curpos.m_row][curpos.m_col]=curstep; //留下足迹,标注当前位置是马第几次走
e.seat.m_row=curpos.m_row;
e.seat.m_col=curpos.m_col;
e.di=0;
path.Push(e); //当前位置和方向入栈
curstep++;
if(curstep==65)
return true;