设计说明书。
起止日期: 2016 年 6 月 27 日至 2016 年 7 月 1 日。
2024年 7 月 1 日。
旅行商问题,即tsp问题(tr**elling salesman problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
tsp的历史很久,最早的描述是2024年欧拉研究的骑士周游问题,即对于国际象棋棋盘中的64个方格,走访64个方格一次且仅一次,并且最终返回到起始点。
tsp由美国rand公司于2024年引入,该公司的声誉以及线形规划这一新方法的出现使得tsp成为一个知名且流行的问题。
tsp问题是一个组合优化问题。该问题可以被证明具有np计算复杂性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。
旅行推销员问题是图论中最著名的问题之一,即“已给一个n个点的完全图,每条边都有一个长度,求总长度最短的经过每个顶点正好一次的封闭回路”。edmonds,cook和karp等人发现,这批难题有一个值得注意的性质,对其中一个问题存在有效算法时,每个问题都会有有效算法。
迄今为止,这类问题中没有一个找到有效算法。倾向于接受np完全问题(np-complete或npc)和np难题(np-hard或nph)不存在有效算法这一猜想,认为这类问题的大型实例不能用精确算法求解,必须寻求这类问题的有效的近似算法。
microsoft visual c++ 6.0不仅是一个c++ 编译器,而且是一个基于windows操作系统的可视化集成开发环境(ide)。visual c++6.
0由许多组件组成,包括编辑器、调试器以及程序向导appwizard、类向导class wizard等开发工具。 这些组件通过一个名为developer studio的组件集成为和谐的开发环境。
tsp问题最容易想到的也肯定能得到最佳解的算法是穷举法,即考虑所有可能的旅行路线,从中选择最佳的一条。但是用穷举法求解tsp问题的时间复杂度为ο(n!),当n大到一定程度后是不可解的。
于tsp问题,一个旅行家要穿过多个城市,已知城市个数,以及城市间距,每个城市经历且只经历一次,求出最短路径解和最短路径长度。
本实验只要求近似解,可以采用贪心法求解:任意选择某个城市作为出发点,然后前往最近的未访问的城市,直到所有的城市都被访问并且仅被访问一次,最后返回到出发点。输入城市数目n为正整数,城市间距离按邻接矩阵方式排列输入,最小值为0,共有n*n个数值;输出最优解和最优值。
以下是核心功能**分析:
贪心算法排序:为了解决问题,需要寻找一个构成解的候选对象集合,它可以优化目标函数,贪婪算法一步一步的进行。起初,算法选出的候选对象的集合为空。
接下来的每一步中,根据选择函数,算法从剩余候选对象中选出最有希望构成解的对象。如果集合中加上该对象后不可行,那么该对象就被丢弃并不再考虑;否则就加到集合里。每一次都扩充集合,并检查该集合是否构成解。
如果贪婪算法正确工作,那么找到的第一个解通常是最优的。
**如下图所示:
1、上网查找与题目相关的资料,并重点阅读课本上的相关知识。
2、对问题进行抽象,得到描述问题的算法,编写出程序。
3、设计完整的程序进行演示。
4、对设计进行总结分析。
功能模块:
主函数:intmain()
主要由以下函数构成:
int distancemin(int *p):搜索得到与当前距离最近的城市,返回当前距离最短节点对应下标
void creatarry():动态创建标记数组
void creatematrix():动态创建矩阵
void tsp():贪心算法排序。
由于以下程序中定义creatematrix时忘记加括号导致程序错误。
请输入城市数:
输入城市间距离的邻接矩阵:
输入一个邻接矩阵 0 20 30 30 80 50
安全无误,测试运行其上的软件和硬件环境的描述。准备一些数据用于测试。设计测试用例时,相应的输出结果正确,而且测试用例应包括合理的输入数据和不合理的输入数据。
1)输入:a.城市数:6(如下图):
b. 城市间距离的邻接矩阵(如下图)
2)输出:a.最短路径:1->2,2->6,6->4,4->3,3->5,5->1.
b.最短距离:290
本次数据结构的课程设计,从第一天的选题到最后一天的设计成果,虽然时间只有短短一周,但我收获良多。
开始对于tsp这个问题,只是对旅行者的问题比较感兴趣,经过详细的tsp问题实例与计算,我选择了tsp问题。我认为在程序设计中细心很重要,常常一个符号的错误就需要很长时间的修改。在设计过程中要善于查找资料,认真查看课本,又不懂的问题及时问老师或者同学。
数据结构这是一门知识, 纯属于设计的科目,它需用把理论变为上机调试。 纯属于设计的科目,它需用把理论变为上机调试。我选的上机题目是tsp问题。
刚开始都没什么思路,后面问了老师和同学加上自己逐渐有了思路,刚开始调试**的时候有时就是一个很小的错误,导致整个程序不能运行。在看程序的过程中,不断的上网查资料以及翻阅相关书籍,通过不断的模索,测试,发现问题,解决问题和在老师的帮助下一步一步慢慢的正确运行程序,终于完成了这次课程设计。过程中每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件!
通过本次课程设计巩固了课本的基本知识,熟练运用课程知识。提高我们组织数据及编写程序的能力,使我们能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的问题在计算机内部表示出来并用软件解决问题,本次实验大大提高了我们对编程的爱好。同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得硬件语言。
自已懂得的知识很是不足,学无止境,以后还会更加的努力深入的学习。
1] 严蔚敏,吴伟民。数据结构[m],清华大学出版社。
2]谭浩强。《c语言程序设计》(第三版).清华大学出版社。
3] 刘振鹏,罗文劼,石强。《数据结构》(第三版).中国铁道出版社。
4]李长云,廖立君,王平,童启,王志兵。《c语言程序设计》国防工业出版社。
源**如下:
#include<>
#include<>
int *choiced定义于全局,所有函数都能访问
int **matrix定义二级指针,操作矩阵。
int n节点数。
int distancemin(int *p); 返回当前距离最短节点对应下标。
void creatarry动态创建标记数组。
void creatematrix动态创建矩阵。
void tsp贪心算法排序。
int main()
printf("输入城市间距离的邻接矩阵:",n);
for(i=0;i
void creatarry()
int i=0;
choiced=(int *)malloc ((sizeof(int *)n);
choiced[0]=0;
for(i=1;i 东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问... 设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供... 河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...数据结构课程设计报告
数据结构课程设计报告
数据结构课程设计报告