• 大小: 4KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: 马踏棋盘  c语言  

资源简介

带蹩马腿功能的马踏棋盘程序,运用了带有回溯功能的递归函数输出所有的路径。运行时间可能较长,打印输出所有的情况需要等待一定的时间。

资源截图

代码片段和文件信息

#include
#include
#include
#pragma warning(disable:4996)//头文件及宏定义

#define MAXN 10//棋盘的最大尺寸
#define STALL_PIECE 123//蹩马腿棋子

int board[MAXN][MAXN] = { 0 };//初始化棋盘
int moveHorizental[8] = { 21-1-2-2-112 };
int moveVertical[8] = { 1221-1-2-2-1 };//定义马移动的八种方式

int stallPieceNumber;//蹩马腿棋子的数目

/*
  功能:检查输入是否符合规范
  传入参数:马的横纵坐标 棋盘的大小
  返回参数:bool数据类型
*/
bool Check(int x int y int N)
{
if (x < 0 || x >= N || y < 0 || y >= N || board[x][y] != 0) //检查输入坐标是否在棋盘内以及该位置是否已经被走过或有蹩马腿棋子占用
return false;//输入不符合规范
return true;//输入符合规范
}

/*
  功能:判断是否被蹩马腿
  传入参数:当前位置 下一个位置
  返回参数:bool数据类型
*/
bool IsStalled(int currentX int currentY int nextX int nextY)
{
bool flag = false;//有没有被蹩马腿的标志

int deltX = nextX - currentX;
int deltY = nextY - currentY;//计算位置的变化量

bool pieces[4] = { false };//初始假设四个方向均未被蹩马腿
if (board[currentX - 1][currentY] == STALL_PIECE)
pieces[0] = true;//左侧有棋子
else if (board[currentX][currentY + 1] == STALL_PIECE)
pieces[1] = true;//下方有棋子
else if (board[currentX + 1][currentY] == STALL_PIECE)
pieces[2] = true;//右侧有棋子
else if (board[currentX][currentY - 1] == STALL_PIECE)
pieces[3] = true;//上方有棋子

if (pieces[0] && abs(deltY) == 1 && deltX == -2)
flag = true;//左侧被蹩马腿
if (pieces[1] && abs(deltX) == 1 && deltY == 2)
flag = true;//下方被蹩马腿
if (pieces[2] && abs(deltY) == 1 && deltX == 2)
flag = true;//右侧被蹩马腿
if (pieces[3] && abs(deltX) == 1 && deltY == -2)
flag = true;//上方被蹩马腿
return flag;//返回是否被蹩马腿
}

/*
  功能:寻找马踏棋盘的路径
  传入参数:马的当前位置坐标 棋盘大小 走的步数
  返回参数:无
*/
void HorseTraversal(int thisX int thisY int N int stepNumber)
{
int i;//循环控制变量
int nextX nextY;//马的下一个位置的坐标
for (i = 0; i 

评论

共有 条评论