用vc实现的马跳棋盘
源代码在线查看: mainclass.cpp
软件大小: |
52 K |
上传用户: |
magicchange |
|
|
关键词: |
|
下载地址: |
免注册下载 普通下载
|
|
// 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 cout
}
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_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个方位进行递归
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 for(int j=1;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_xm_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 for(int j=1;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 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 {
m_RecordPosition[i].m_CurrptrPosition.m_x=0;
m_RecordPosition[i].m_CurrptrPosition.m_y=0;
}
finded=false;
}