用vc实现的马跳棋盘

源代码在线查看: mainclass.cpp

软件大小: 52 K
上传用户: magicchange
关键词:
下载地址: 免注册下载 普通下载 VIP

相关代码

				// 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;
				}
							

相关资源