(5) 起始坐标函数模块:将马的起始位置坐标与棋盘坐标联系起来,通过调用
探寻路径函数和输出路径函数达到预期效果。
(6) 主程序模块:主要是完成棋盘初始化,输入,调用等任务进而来完成马踏
棋盘问题。
另外,一般来说,当马位于(i,j)时,可以走下列 8 个位置之一:
(i-2,j+1) (i-1,j+2) (i+1,j+2) (i+2,j+1)
(i+2,j-1) (i+1,j-2) (i-1,j-2) (i-2,j-1) 这 8 个可能的位置可以用两个一维数组
存放,利用一维数组表示马在棋盘内新位置。但是,如果 (x,y)靠近棋盘的边缘,上
述位置可能超出棋盘范围,成为不允许的位置。
3.2 主要数据结构及算法
(1) 定义头文件和宏定义
#include<stdio.h>
#define MAXSIZE 100
#define N 8
(2)数据类型定义
int board[8][8]; 定义棋盘;
int Htry1[8]={1,-1,-2,2,2,1,-1,-2};
int Htry2[8]={2,-2,1,1,-1,-2,2,-1};Htry1[8]和 Htry2[8]分别表示马各个出口位
置相对当前位置的横坐标和纵坐标的增量数组;
struct Stack
{
int i;
int j;
int director;
}stack[MAXSIZE];
int top=-1; 这里是定义栈类型,其中 i 是横坐标,j 是纵坐标,director 是存
储方向,stack[MAXSIZE]表示定义一个栈数组,top=-1 表示栈指针,可以存储棋盘
上的信息以及栈中元素移动情况。
(3) 探寻路径函数
定义一个 TryPath(int i,int j)函数来探寻马的行走路径,此函数通过 while(top>-
1)语句将程序控制在栈不为空的情况下进行循环,在 while 循环中,首先通过一个
双重 for 循环记录下当前位置的下一个位置的可行路径条数,在通过一个双重 for 循
环将前面可行路径条数从小到大排序存储在数组中,最后通过一个 for 循环来向 8 个
方向进行探寻。
(4) 输出路径函数
定义一个 Display()函数来按照棋盘格式输出马的探寻路径,此函数通过一个双重
for 循环来实现的,外循环控制横坐标的增加,内循环控制纵坐标的增加。
(5) 起始坐标函数
定义一个 InitLocation(int xi,int yi)函数将马的行走路径与棋盘坐标联系起来达到预
期效果,此函数是通过栈将马的起始位置与棋盘坐标联系起来的,并且调用了
TryPath(int i,int j)函数和 Display()函数。
(6) 主函数
评论1
最新资源