数据结构马踏棋盘课程设计报告.docVIP

  • 161
  • 0
  • 约1.47万字
  • 约 20页
  • 2017-11-30 发布于江西
  • 举报
数据结构马踏棋盘课程设计报告

附件2: 课程设计任务书 学生姓名: 朱涛涛 专业班级: 0506班 指导教师: 袁小玲 工作单位: 计算机科学系 题 目: 马踏棋盘的程序设计 初始条件: 设计一个国际象棋的马踏遍棋盘的演示程序。 将马随机放在国际象棋的8×8棋盘Board[8][8]的某个方格中,马按走棋规则(见题集p98)进行移动。要求每个方格只进入一次,走边棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,3,…,64依次填入一个8×8的方阵,输出之。 测试用例见题集p98。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容: 1、 问题描述 简述题目要解决的问题是什么。 2、 设计 存储结构设计、主要算法设计(用类C语言或用框图描述)、测试用例设计; 3、 调试报告 调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。 4、 经验和体会(包括对算法改进的设想) 5、 附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出, 6、 设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。 时间安排: 1、第18周(7月2日至7月8日)完成。 2、7月9 日10:00到计算中心检查程序、交课程设计报告、源程序(CD盘)。 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 一. 问题描述 本程序是一个马踏棋盘的演示程序,主要的问题描述为: 在一个空白的8*8格的棋盘上,对于任意的输入坐标(1~8),表示马从此坐标开始以”日”字走法,遍历整个棋盘,要求在整个遍历的过程中,每一个方格只走一次,不能重复.且在设计中不能使用递归的算法. 本程序特点:我在程序中引用了一个WINDOWS API,先算出全部的步法关键点,再在程序中画一个方格,然后在方格中按顺序输出各个值,运用了控制台的定位函数,能依次一步步把1,2,3,4,………. ,64 这样的序列填入各个坐标中去,使得马的遍历过程像动画一样的演示,一目了然. 二. 设计 1.存储结构设计 #define CHESSBOARD 8 typedef int chessboard[CHESSBOARD][CHESSBOARD]; 这个数组是整个棋盘的所有方格的集合. typedef struct step{ int x,y; //the x-postion and y-position of a step int direction;//the last direction has stepped } * pStep; 上面这个结构体是用于保存在马踏棋盘的过程中所以经历的每个方格的坐标,以及对下一个方格的访问方向. struct stack_step{ pStep pBase; pStep pTop; int total_size; }; 这个结构体是一个栈的存储结构,用于保存已经遍历过的信息,用于在遍历过程中的回溯问题. 2.主要算法设计(用类C语言或用框图描述) 本程序的思想为: 假设图中”0”所在的点为任何一点(中间点),则可知道,对于当前的点”0”可以有1~8这八个方向的跳法,使得程序继续遍历下去,本程序正是采用的这1~8八个方向,且也是按这8个优先级进行搜索的,程序会对访问过的点的坐标和方向全压入堆栈中去,以便回溯,假设当遍历到”1”时会出现死路的现象,此时会用GetTop()返回当前堆顶元素,即”0”,然后按”2”的方向进行搜索,直到8个方向全是死路时”0”出栈,然后退回上一层结点.如此循环,直到找出正确的顺序. 本程序所使用的算法函数如下: void SetPos(int nX, int nY); void frame(int x, int y, int width, int height); // the funcions below operate on stack_step; void Init_Stack(stack_step steps); bool IsEmpty(stack_step steps); bool Push(stack_step steps, step s); bool Popup(stack_step steps, step s

文档评论(0)

1亿VIP精品文档

相关文档