算法专题训练课程设计报告Word文件下载.docx
《算法专题训练课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《算法专题训练课程设计报告Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
计算机科学与技术
组别
组长
组员
指导教师姓名
孙士保、王志强、陈永刚
课程设计目的
进一步巩固C程序设计和算法设计与分析的基础知识,提升结构化程序、模块化程序设计的方法和能力,深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。
在实践中培养独立分析问题和解决问题的作风和能力。
设计环境
1.PC兼容机2.Windows2000/XP操作系统
3.TC集成开发环境或其他C语言开发环境
课程设计要求和任务
要求:
1.熟练掌握回溯法,能够利用回溯法解决实际问题;
2.使用文件进行存储和管理。
程序启动时可从文件中读取信息,或从键盘输入信息;
运行过程中也可对文件进行存取;
退出前可选择将部分信息保存到文件中;
3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。
对程序其它部分也进行必要的注释。
4.对系统进行功能模块分析、画出总流程图和各模块流程图;
5.用户界面要求使用方便、简洁明了、美观大方、格式统一。
所有功能可以反复使用,最好使用菜单;
6.通过命令行相应选项能直接进入某个相应菜单选项的功能模块;
7.所有程序需调试通过。
任务:
完成罗密欧与朱丽叶的迷宫问题.设计内容包括:
1.确定能对给定的任何位置的罗密欧都能够找到一条通向朱丽叶的路线;
2.程序能够演示一条罗密欧找到朱丽叶的路线过程等。
课程设计工作进度计划
序号
起止日期
工作内容
1
2013.6.24
下发任务书,分组,选定课题,查阅相关资料
2
2013.6.25
总体设计,划分模块,编制源程序
3
2013.6.26
上机调试,修改、完善系统
4
2013.6.27
程序检查,撰写说明书
5
2013.6.28
撰写说明书,上交报告
6
2013.6.29-2013.6.30
上交报告
课程设计报告
课程名称:
软件专题训练
设计题目:
罗密欧与朱丽叶迷宫问题系统设计
院系:
电子信息工程学院计算机系
专业:
计算机科学与技术
班级:
学生姓名:
学号:
起止日期:
2013年6月24日~2013年6月30日
指导教师:
孙士保、王志强、陈永刚
目录
第一章需求分析1
1.1课程设计题目1
1.2课程设计任务及要求1
1.3软硬件运行环境及开发工具2
第二章概要设计2
2.1罗密欧与朱丽叶迷宫问题流程图2
2.2函数设计模块划分3
第三章详细设计3
3.1判断是否越界及更新保存最优路径流程图3
3.2越界判断及最优路径的设计与实现4
第四章系统调试与操作说明5
4.1系统调试及结果5
4.2错误及解决方法5
第五章课程设计总结与体会6
附录源程序7
第一章需求分析
1.1课程设计题目
罗密欧与朱丽叶迷宫求解问题。
任务描述:
罗密欧与朱丽叶的迷宫。
罗密欧与朱丽叶身处一个m×
n的迷宫是中。
每一个方格表示迷宫中的一个房间。
这m×
n个房间中有一些房间是封闭的,不允许任何人进入。
在迷宫中任
何位置均可沿8个方向进入未封闭的房间。
罗密欧位于迷宫的。
(p,q)方格中,他必须找出一条通向朱丽叶所在的(r,s)方格的路。
在抵达朱丽叶之前,他必须走遍所有未封闭的房间各一次,而且要使到达朱丽叶的转弯次数为最少。
每改变一次前进方向算作转弯一次。
请设计一个算法帮助罗密欧找出这样一条路。
1.2课程设计任务及要求
2.程序能够演示一条罗密欧找到朱丽叶的路线过程等
1.3软硬件运行环境及开发工具
一、软硬件运行环境
二、开发工具
装有windows操作系统的计算机
VisualC++6.0
第二章概要设计
2.1罗密欧与朱丽叶迷宫问题流程图
return
2.2函数设计模块划分
(1)函数1:
boolstepok(intx,inty)判断是(x,y)否越界。
(2)函数2:
voidsave()保存一条转弯最少的路径
(3)函数3:
voidsearch(intdep,intx,inty,intdi)在当前位置(x,y)按照八个方向搜索,dep用于标记已经走过的房间数,di表示八个方向。
(4)函数4:
voidmain()主函数初始化迷宫数组,调用search函数输出一条迷宫路线。
函数之间的关系:
主函数调用search函数,search函数调用stepok和save函数完成搜索。
如下图
:
main函数
save函数
调用search函数递归调用search函数
调用stepok函数
输出结果
第三章详细设计
3.1判断是否越界及更新保存最优路径流程图
stepok函数:
save函数:
3.2越界判断及最优路径的设计与实现
(1)、越界判断
当输入一个坐标时,首先需要判断它是否在迷宫的边界之内,只有在边界之内才能执行相应的操作,从而把查找并保存查找到的最优路径。
boolstepok(intx,inty)
{//用于判断是否越界
if(x>
0&
&
x<
=n&
y>
y<
=m&
board[x][y]==0)
returntrue;
elsereturnfalse;
}
(2)、保存最优路径
当查找到一条路径后,判断它是否是当前的最优路径,如果是的话,那么就需要将此路径保存到最优路径
voidsave()
{//保存路径步骤
inti,j;
for(i=1;
i<
=n;
i++)
for(j=1;
j<
=m;
j++)
bestw[i][j]=board[i][j];
第四章系统调试与操作说明
4.1系统调试及结果
输入迷宫中的各个参数:
(1)、迷宫的行列数及封闭房间个数m,n,k分别是3,4,2。
(2)、2个封闭房间的坐(p,q))分别是(1,2),(3,4)。
(3)、罗密欧与朱丽叶的坐标(x,y),(x1,y1)分别是(1,1),(2,2)。
输出:
输出一条迷宫路线:
1-176
21058
349-1
输入输出及运行结果:
4.2错误及解决方法
问题1
(1)问题描述:
程序中关于迷宫的参数较多使得问题复杂难懂,编写时也容易使用混淆。
(2)解决办法:
通过多次手动走迷宫深入的理解每一个参数,这样使用时才得心应手。
问题2
迷宫数组的大小不容易掌握。
采用malloc动态分配迷宫的存储空间。
问题3
(1)问题描述:
数组访问越界,造成输出结果错误
检查数组的定义和访问。
第五章课程设计总结与体会
在这个课程设计中,我主要负责越界判断及更新保存最优路径的部分,通过将近一个星期的学习和探索,我学到了好多知识,不仅学会了熟练使用C语言编程的能力,而且还学会了怎样将所学知识应用到实际操作中。
但是在整个课程设计阶段,自己还有很多不足的地方,暴露了我在很多地方的小错误,一旦遇到很难解决的问题,陷入困境后,很难自己独立的解决问题,常常需要老师的引导和同学的帮助,在今后的学习工作过程中还要加强独立解决问题的能力。
本次设计让我更深一步的了解到了上机实验的重要性,本次程序不是很复杂,只要对算法的有深入的认识与掌握就可以得到输出的结果。
但程序中涉及到了多个参数,在上机实验过程中通过一次次实验对算法一步步执行中,彻底弄明白其中的各个参数及函数的作用及用法,特别是对回溯法有了更深的理解。
在程序的编写输入输出的过程中虽然其中遇到了很多错误与困难,但正是在解决这些错误与困难的过程中才会使我们的能力有所提高,知识有所更深入的理解,并进一步巩固了C程序设计和算法设计与分析的基础知识,增强对算法的理解能力,提高软件设计能力,熟练掌握了回溯法,能够利用回溯法解决实际问题。
我明白了只有通过实际操作,才能发现自己的不足,与同学互相讨论也有助于提高自己的实践操作水品及解决问题的能力。
附录源程序
#include<
iostream>
#include<
iomanip>
process.h>
usingnamespacestd;
intdir[9][2]={{0,0},{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
intcount;
//不同的最少转弯道路数
intdirs,best;
//最少转弯次数
intboard[10][10],bestw[10][10];
//记录第几步到达方格
intm,n,k;
//列数,行数,封闭房间数
intsx,sy,ex,ey;
//(sx,sy)罗密欧的位置,(ex,ey)朱丽叶的位置
voidsearch(intdep,intx,inty,intdi)
{//查找过程
i