📄 mainclass.cpp
字号:
// MainClass.cpp: implementation of the CMainClass class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "WIN马踏棋盘.h"
#include "MainClass.h"
#include "iostream.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMainClass::CMainClass()
{
OninitChessBoard();//初始化棋盘
m_record=0;//记录为空
finded=false;
}
CMainClass::~CMainClass()
{
}
void CMainClass::ShowHorseProcess()
{
//输出马踏棋盘的过程
extern int m_ChessBoardSize_x;//棋盘的位置
extern int m_ChessBoardSize_y;
for(int i=1;i<=m_ChessBoardSize_x*m_ChessBoardSize_y;i++)
cout<<"马的位置<"<<m_RecordPosition[i].m_CurrptrPosition.m_x<<","<<m_RecordPosition[i].m_CurrptrPosition.m_y<<">\n";
}
void CMainClass::MainFuntion(CHorsePosition m_horse)
{
extern int m_ChessBoardSize_x;//棋盘的位置
extern int m_ChessBoardSize_y;
//把棋子下到棋盘
m_ChessBoard[m_horse.m_CurrptrPosition.m_x][m_horse.m_CurrptrPosition.m_y]=true;
m_record++;//棋子记录加1
//cout<<"<"<<m_horse.m_CurrptrPosition.m_x<<","<<m_horse.m_CurrptrPosition.m_y<<">\n";
//写入记录集合
m_RecordPosition[m_record].m_CurrptrPosition.m_x=m_horse.m_CurrptrPosition.m_x;
m_RecordPosition[m_record].m_CurrptrPosition.m_y=m_horse.m_CurrptrPosition.m_y;
m_horse.SetAbutPosition();//设置8个相邻节点
CHorsePosition currptr;
for(int i=1;i<=8;i++)
{
//对可能的8个方位进行递归
currptr.m_CurrptrPosition.m_x=m_horse.m_AbutPosition[i].m_x;
currptr.m_CurrptrPosition.m_y=m_horse.m_AbutPosition[i].m_y;
if((!OverFlow(currptr))&&(!finded))//不溢出
{
MainFuntion(currptr);
}
}//结束递归
if(m_record==m_ChessBoardSize_x*m_ChessBoardSize_y)//8个方向都不可以走,判断下一步是否可以回到原点
{
//如果可以回到原点
if(RecurOrigin(m_horse)==true)//已经把整个棋盘遍历一遍//而且可以回到原点
{
finded=true ;
//ShowHorseProcess();//输出遍历过程
}
else
{
//往回走
//撤销棋子
m_ChessBoard[m_horse.m_CurrptrPosition.m_x][m_horse.m_CurrptrPosition.m_y]=false;
//删除记录集合
m_record--;
}
}
else
{
//8个方向不可以走//而且下一步回不到原点
//往回走
//撤销棋子
m_ChessBoard[m_horse.m_CurrptrPosition.m_x][m_horse.m_CurrptrPosition.m_y]=false;
//删除记录集合
m_record--;
}
}
void CMainClass::OninitChessBoard()
{
//初始化棋盘
extern int m_ChessBoardSize_x;//棋盘的位置
extern int m_ChessBoardSize_y;
for(int i=1;i<=m_ChessBoardSize_x;i++)
for(int j=1;j<=m_ChessBoardSize_y;j++)
m_ChessBoard[i][j]=false;
}
bool CMainClass::OverFlow(CHorsePosition m_horse)
{
//溢出判断
extern int m_ChessBoardSize_x;//棋盘的位置
extern int m_ChessBoardSize_y;
if((m_horse.m_CurrptrPosition.m_x<1)||(m_horse.m_CurrptrPosition.m_y<1)||(m_horse.m_CurrptrPosition.m_y>m_ChessBoardSize_y)||(m_horse.m_CurrptrPosition.m_x>m_ChessBoardSize_x))
return true;//溢出棋盘
if(m_ChessBoard[m_horse.m_CurrptrPosition.m_x][m_horse.m_CurrptrPosition.m_y]==true)
return true; //位置已经踏过
return false;
}
bool CMainClass::AllPositionAcess()
{
//判断是否已经遍历完整个棋盘
extern int m_ChessBoardSize_x;//棋盘的形状
extern int m_ChessBoardSize_y;
for(int i=1;i<=m_ChessBoardSize_x;i++)
for(int j=1;j<=m_ChessBoardSize_y;j++)
if(m_ChessBoard[i][j]==false)
return false;
return true;
}
bool CMainClass::RecurOrigin(CHorsePosition m_horse)
{
int k=0;
//判断马的下一步是否可以回到原点
extern int O_X,O_Y;
m_horse.SetAbutPosition();//设置下一步要到达的点
for(int i=1;i<=8;i++)
if((m_horse.m_AbutPosition[i].m_x==O_X)&&(m_horse.m_AbutPosition[i].m_y==O_Y))
{
k=1;
break;
}
if(k==1)
return true;
else
return false;
}
void CMainClass::Oninit()
{
OninitChessBoard();//初始化棋盘
m_record=0;//记录为空
for(int i=1;i<=64;i++)
{
m_RecordPosition[i].m_CurrptrPosition.m_x=0;
m_RecordPosition[i].m_CurrptrPosition.m_y=0;
}
finded=false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -