复地遍历所有的8×8棋格的功能。按照需求,并考虑到程序的可读性,我们按顺序共设计了以下六大模块:
(1) 定义头文件和宏定义模块:这是C程序必不可少的一个部分,通过头文件来调用程序所需库函数,而通过宏定义进行宏替换。
(2) 数据类型定义模块:该模块定义了全局数据结构,它们的作用域为从定义开始到本源文件结束,以便于让后面很多函数都可以用到它们,而不必再重新定义。
(3) 探寻路径函数模块:按照马的行走规则对棋盘进行遍历,寻找马的行走路径,每次仅访问一个棋格,保证每个棋格都访问到且每个棋格仅访问一次。
(4) 输出路径函数模块 :对探寻路径函数模块中保存下来的顺序进行输出,输出格式按照棋盘8×8的方阵格式。
(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)靠近棋盘的边缘,上述位置可能超出棋盘范围,成为不允许的位置。
二、概要设计 1.整体框架设计
(1) 定义头文件和宏定义
#include<stdio.h> #include "conio.h" #include"stdlib.h" #define M 8 (2)数据类型定义
1)定义棋盘数组:int board[8][8]; 2)定义结构体数组,如下: