数据结构课程设计报告模板--计科 (1)

合集下载

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。

二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。

在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。

三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。

2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。

3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。

4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。

5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。

四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。

2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。

通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。

3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。

链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。

在实现链表时,我们定义了一个节点结构,包含数据域和指针域。

通过指针的方式将节点连接起来,形成一个链式结构。

同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。

4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。

《数据结构》实验报告模板(附实例)--实验一线性表的基本操作实现

《数据结构》实验报告模板(附实例)--实验一线性表的基本操作实现

《数据结构》实验报告模板(附实例)---实验一线性表的基本操作实现实验一线性表的基本操作实现及其应用一、实验目的1、熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。

2、巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。

二、实验内容√ 1、单链表的表示与操作实现 ( * )2、约瑟夫环问题3、Dr.Kong的艺术品三、实验要求1、按照数据结构实验任务书,提前做好实验预习与准备工作。

2、加“*”题目必做,其他题目任选;多选者并且保质保量完成适当加分。

3、严格按照数据结构实验报告模板和规范,及时完成实验报告。

四、实验步骤(说明:依据实验内容分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(成员函数)的伪码算法、函数实现、程序编码、调试与分析、总结、附流程图与主要代码)㈠、数据结构与核心算法的设计描述(程序中每个模块或函数应加注释,说明函数功能、入口及出口参数)1、单链表的结点类型定义/* 定义DataType为int类型 */typedef int DataType;/* 单链表的结点类型 */typedef struct LNode{ DataType data;struct LNode *next;}LNode,*LinkedList;2、初始化单链表LinkedList LinkedListInit( ){ // 每个模块或函数应加注释,说明函数功能、入口及出口参数 }3、清空单链表void LinkedListClear(LinkedList L){// 每个模块或函数应加注释,说明函数功能、入口及出口参数}4、检查单链表是否为空int LinkedListEmpty(LinkedList L){ …. }5、遍历单链表void LinkedListTraverse(LinkedList L){….}6、求单链表的长度int LinkedListLength(LinkedList L){ …. }7、从单链表表中查找元素LinkedList LinkedListGet(LinkedList L,int i){ //L是带头结点的链表的头指针,返回第 i 个元素 }8、从单链表表中查找与给定元素值相同的元素在链表中的位置LinkedList LinkedListLocate(LinkedList L, DataType x){ …… }9、向单链表中插入元素void LinkedListInsert(LinkedList L,int i,DataType x) { // L 为带头结点的单链表的头指针,本算法// 在链表中第i 个结点之前插入新的元素 x}10、从单链表中删除元素void LinkedListDel(LinkedList L,DataType x){ // 删除以 L 为头指针的单链表中第 i 个结点 }11、用尾插法建立单链表LinkedList LinkedListCreat( ){ …… }㈡、函数调用及主函数设计(可用函数的调用关系图说明)㈢程序调试及运行结果分析㈣实验总结五、主要算法流程图及程序清单1、主要算法流程图:2、程序清单(程序过长,可附主要部分)说明:以后每次实验报告均按此格式书写。

数据结构课程设计——报告(样例)

数据结构课程设计——报告(样例)

《数据结构与算法》课程设计报告王婧、龚丹、宋毅编写题目:航空订票管理系统学期:2014秋班号:学号:姓名:成绩:哈尔滨华德学院电子与信息工程学院2014年12月一、实训设计的目的与要求(注:正文为宋体,五号字,为单倍行距)(一)课程设计目的(不少于100字)1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统。

2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。

具体的有:(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。

(二)题目要求(不少于100字)1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名和所需数量)。

2.系统能实现的操作和功能如下:(1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;(2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。

若需要,可登记排队候补;(3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

二、实训环境配置Windows系统CodeBlocks三、设计正文1.需求分析本订票系统能够实现全部航线信息的浏览功能、订票客户信息的查询功能、单条航线查询功能、订票功能和退票功能。

数据结构课程设计报告模板

数据结构课程设计报告模板

数据结构课程设计报告模板篇一:数据结构课程设计报告模板课程设计说明书课程名称:数据结构与算法专业:计算机科学与技术班级: 103013姓名:徐粤玲学号:03成绩:完成日期:XX年1 月 12日任务书摘要本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。

所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。

关键词:黑白棋编程设计s目录1.引言 ................................................ ................................................... .. (4)2.课题分析 ................................................ ................................................... (7)3.具体设计过程 ................................................ ....................................................8设计思路 ................................................ ...................................................8程序设计流程图 ................................................ (8)函数实现说明 ................................................ .. (12)4.程序运行结果 ................................................ ..................................................145.软件使用说明 ................................................ ..................................................186.结论 ................................................ ................................................... (21)参考文献 ................................................ ................................................... . (23)附录:源代码 ................................................................................................... .. 241.引言数据结构在计算机科学界至今没有标准的定义。

数据结构课程设计实验报告 完整版

数据结构课程设计实验报告 完整版

第一章链表的应用线性表是数据结构中最简单、最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响着后继课程的学习。

线性表的顺序存储结构,即顺序表的概念相对比较简单,因此,本章的主要任务是使用有关单链表的操作来实现通讯录信息系统的管理。

1.1设计要求本章的设计实验要求使用有关链表的操作来实现通讯录信息系统的管理。

为了验证算法,通讯录管理包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询及通讯录表的输出等。

主控菜单的设计要求使用数字0—5来选择菜单项,其他输入则不起作用。

程序运行后,给出6个菜单项的内容和输入提示:1.通讯录链表的建立2. 通讯者结点的插入3. 通讯者结点的查询4. 通讯者结点的删除5. 通讯录链表的输出0. 退出管理系统请选择0—5:1.2设计分析1.2.1主控菜单函数设计分析1.实现循环和功能选择首先编写一个主控菜单驱动程序,输入0—5以进入相应选择项。

假设输入选择用变量sn存储,它作为menu_select函数的返回值给switch语句。

使用for循环实现重复选择,并在主函数main()中实现。

实际使用时,只有选择大于5或小于0的值,程序才能结束运行,这就要使用循环控制。

这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用了“return”语句,也可以使用“exit(0);”语句。

2.得到sn的合理值如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。

假设函数名为menu_select,对于sn的输入值,在switch 中case语句对应数字1—5,对于不符合要求的输入,提示输入错误并要求重新输入。

将该函数与主函数合在一起,编译运行程序,即可检查并验证菜单选择是否正确。

1.2.2功能函数设计分析1.建立通讯录链表的设计这里实际上是要求建立一个带头结点的单链表。

建立单链表有两种方法,一种称之为头插法,另一种称为尾插法。

数据结构课程设计报告模板

数据结构课程设计报告模板

课程设计报告
课程设计名称:数据结构
系:计算机科学系
学生姓名:
班级:
学号:
成绩:
指导教师:
开课时间:学年学期
一.设计题目
二.主要内容
(所选课题的需求分析,实现功能等)
三.课题设计的基本思想,原理和算法描述
(包括课题所用数据结构,界面设计、输入/输出设计,功能模块设计,符号说明等)
四.源程序及注释
五、运行示例及结果分析
(截图分析)
六、调试和运行程序过程中产生的问题及采取的措施
七、总结和展望
(400字以上)
八、参考资料
(格式为:[序号]作者.书名.出版社,出版年份如:
[1] 李建学等著.数据结构课程设计案例精编.清华大学出版社,2007
[2] 唐宁九等主编.数据结构与算法(C++版)实验和课程设计教程. 清华大学出版社,2008)
注:以上所有正文内容(所给八个标题除外)均采用小四字体书写,且每段首行缩进,段落间距1.3倍行距。

《数据结构》课程设计报告范本(doc 8页)

《数据结构》课程设计报告范本(doc 8页)

《数据结构》课程设计报告范本(doc 8页)《数据结构》课程设计报告一、课程设计的内容、要求1 线性表的另一种实现。

对顺序表空间被耗尽问题的一个解决办法是:当数组溢出时,用一个更大的数组替换该数组。

一个较好的法则是:当出现溢出时,数组长度加长一倍具有较高的时间和空间效率。

参照教材中顺序表的有关内容,按上面的要求实现顺序表,并测试当数组溢出时你的实现的运作情况。

二、所采用的数据结构ADT List{数据对象: D = {a i|a i ∈ElemSet, i=1,2…n>=0}数据关系: R1={<a i-1, a i>|a i-1, a i∈D, i=1,2,…,n}基本操作:void IniList(SqList& L);void DestroyList(SqList& L);bool ListEmpty(SqList L);int ListLength(SqList L);void GetElem(SqList L, int i, Elem &e);bool PriorElem(SqList L, Elem cur_e, Elem &pre_e);bool NextElem(SqList L, Elem cur_e, Elem &next_e);void ListInsert(SqList &L, int i, Elem e);void ListDelete(SqList &L, int i);void ClearList(SqList& L);}三、主要模块(或函数)及其功能typedef struct LIST{ElemType *data;int size;int max_size;}LIST;void InitList(LIST *list)//初始化{list->data = (int*)malloc(sizeof(ElemType)*INIT_SIZE);list->size = 0;list->max_size = INIT_SIZE;}void DestroyList(LIST &list){}bool NextElem(LIST list,int cur_e,int &next_e)//后继{if(cur_e < 0 || cur_e > list.size) return false;else{next_e = cur_e + 1;return true;}}void Insert(LIST *list,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}list->data[list->size] = value;list->size++;}void Insert_Back(LIST *list,int idx,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}if(idx>list->size){list->data[list->size] = value;}else{int i;for(i=list->size;i>idx;i--){list->data[i] = list->data[i-1];}list->data[idx] = value;}list->size++;}void ListDelete(LIST *list,int i,ElemType *e)//删除一个元素{int j;*e=list->data[i];for(j=i+1;j<=list->size-1;j++)list->data[j-1]=list->data[j];list->size--;}void Print_list(LIST *list){int i;if(list->size == 0){cout<<"当前线性表内没有元素。

《数据结构》课程设计报告

《数据结构》课程设计报告

《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。

本课程目标如下:1. 知识目标:(1)理解数据结构的基本概念,包括线性表、栈、队列、串、数组、树、图等;(2)掌握各类数据结构的存储表示和实现方法;(3)了解常见算法的时间复杂度和空间复杂度分析;(4)掌握排序和查找算法的基本原理和实现。

2. 技能目标:(1)能够运用所学数据结构解决实际问题,如实现字符串匹配、图的遍历等;(2)具备分析算法性能的能力,能够根据实际问题选择合适的算法和数据结构;(3)具备一定的编程能力,能够用编程语言实现各类数据结构和算法。

3. 情感态度价值观目标:(1)培养学生对计算机科学的兴趣,激发其探索精神;(2)培养学生团队合作意识,提高沟通与协作能力;(3)培养学生面对问题勇于挑战、善于分析、解决问题的能力;(4)引导学生认识到数据结构在计算机科学中的重要地位,激发其学习后续课程的兴趣。

本课程针对高年级学生,课程性质为专业核心课。

结合学生特点,课程目标注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。

在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。

通过本课程的学习,学生将具备扎实的数据结构基础,为后续相关课程学习和职业发展奠定基础。

二、教学内容根据课程目标,教学内容主要包括以下几部分:1. 数据结构基本概念:线性表、栈、队列、串、数组、树、图等;教学大纲:第1章 数据结构概述,第2章 线性表,第3章 栈和队列,第4章 串。

2. 数据结构的存储表示和实现方法:教学大纲:第5章 数组和广义表,第6章 树和二叉树,第7章 图。

3. 常见算法的时间复杂度和空间复杂度分析:教学大纲:第8章 算法分析基础。

4. 排序和查找算法:教学大纲:第9章 排序,第10章 查找。

教学内容安排和进度如下:1. 第1-4章,共计12课时,了解基本概念,学会使用线性表、栈、队列等解决简单问题;2. 第5-7章,共计18课时,学习数据结构的存储表示和实现方法,掌握树、图等复杂结构;3. 第8章,共计6课时,学习算法分析基础,能对常见算法进行时间复杂度和空间复杂度分析;4. 第9-10章,共计12课时,学习排序和查找算法,掌握各类算法的实现和应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告模板--计科 (1)23456市之间的距离存入内存——将城市连成一条回路——通过算法将回路优化——优化一定程度后停止——界面显示最优路线与旅行顺序我们程序的主要算法是遗传算法,其基本描述如下:遗传算法是模拟自然选择和生物进化的过程,以优胜劣汰的方式求解问题。

算法需要选择一种合适的编码方式表示解,并选择一种评价函数来计算每个解的适应值,适应值高的解可以更容易地被选中并进行交配,从而产生新的子代。

选择和交配的过程一直循环,同时以一定的概率进行变异,直到求得满意解或其它终止条件。

算法运行的过程具有很强的指向性,适合众多复杂问题的求解。

遗传算法的过程可以抽象为4大部分:初始化、选择算子、交配算子和变异算子。

初始化确定具体问题在遗传算法中的编码、群体大小、各种概率大小等参数;选择算子确定如何在群体中选择新的种群;交配算子使选出来的种群进行交配以模拟进化;变异算子使新的个体能够保持多样性。

旅行商问题规定了每个城市只能出现一次,因此编码有其特殊性,一般采用整数的编码方式,通过数字序列来表示城市的遍历次序。

采用整数编码方式的简单遗传算法(SGA)的交配策略通常是以单个整数为单位进行,可称为基于点的交配;为TSP设计的交配策略通常都会以边为单位进行,可称为基于边的交配。

1、简单遗传算法的流程如图72、适应度函数适应度函数必须能够配合选择方式有效区分子代的优劣,我们采用的方式是f=1/s ,其中s 是路径的总长度。

3、选择操作8实验采用了轮盘赌的选择方式,它是一种经典的 GA 选择方式,概率大个体在轮盘中占有更大的面积,更容易被选中。

4、变异操作变异操作是让遗传算法跳出局部最优的重要手段。

一般采用的变异操作是随机产生两个变异位,把这两个位的城市调换位置。

在一次变异中,选中的个体进行进行n/20(n为城市数目)次交换。

例:对序列 1 2 3 4 5 6 7 8执行 2 次交换,变异位分别 2 与 5,3 与 6,那么,一次交换后:1 5 3 4 2 6 7 8两次交换后:1 5 6 4 2 3 7 8。

5、优化搜索遗传算法一般采用的是2-opt 二段优化,这是一种简单的优化方案。

一次 2-opt表述如下:选择位置 a,b,尝试倒置ab间的所有路径,如果路径比原来短,则接受倒置,否则路径保持不变。

例如:1 2 3 4 5 6 7 8。

倒置 2,5 间路径,则变成 1 5 4 3 2 6 7 8。

在我们采用遗传算法的优化中,倒置操作一共进行n/10次尝试。

同时因为倒置较长的序列通常不会得到路径提升,所以控制倒置位置a,b 之间的差小于等于n /5。

由于我们的问题实际属于动态旅行商问题,我们提前做了两个假定:(1)旅行期间,城市间的交通都很发达,不存在因交通而耽误时间现象。

(2)在信息采样周期内,城市的规模与城市之间的距离等参数固定。

92.设计步骤2.1需求分析市场营销需要商家派遣人员到各个城市去调查市场状况和推销公司产品,为了节省开销和节约路途花费时间,就产生了旅行商到各个城市的顺序和最短路线选择问题。

基于以上问题,旅行商们需要的是一款能够直观反映所需到达城市的顺序以及最短路线的可视化应用程序,以供自己参考决策,选择最佳行程。

因此,我们的程序为了解决以上问题,采用了C++语言编程,其主要功能是:用可视化界面给用户提够所需到达城市的最短路线。

用户只需用鼠标和热键点击选择所需到达城市,然后通过程序运算,就可看到行程路线。

2.2概要设计针对主要功能,我们首先要设计可视化界面,然后在控件上添加事件过程,再编写代码。

1、程序中使用的主要变量x//点的横坐标y//点的纵坐标CitySites:Point *//城市序列RoomSize /./空间大小Comput //是否正在计算KillMsg//是否关闭计算DistanceM//距离矩阵DMSize//矩阵大小10BestIndex//最有序列CurrBestIndex//当前最有序列BestMark//最高分AVGMark//平均分GenNum//代数BestGen//最优代JumpCountDown//突变剩余次数JumpCount//突变次数TimeUsed//使用时间ProPath//当前路径2、使用的主要函数GetCityNum()//获取城市数量GetCitySite(int index)//获取城市地图中的某点Variant()//变异函数ThreadPro(pParam:LPVOID)//辅助线程ComputeDistanceMatrix()//计算距离矩阵DestroyDistanceMatrix()//销毁举例矩阵Mark(gene:GENE &)//打分函数QuadrangleOptimise(gene:GENE &)//四边形优化GetProPath()//获取当前路径GetStateDescription()// 获取当前状态GetStateSimpleDescription ()// 获取当前的简短状态StartCompute()//开始计算StopCommpute()//停止计算IsComputing()//是否正在计算GetBestMark()//获取当前最高分GetAVGMark()//获取当前平均分WriteFile(filename:CString)//写入文件GetRoute()//获取当前最有路径ReadFile(filename:CString)//读取文件Clear()//清空Draw(pDC:CDC *,rect CRect,highlight:int,highlight2:int)//画图AddCity(x:double,y:double)//添加城市DeleteCity(index:int)//删除城市HitText(x:double,y:double,dx:double,dy:double)//点击测OnPaint();实现界面的初始化OnLButtonDown();//对鼠标做出的反应,实现选中点OnLButtonUp(UINT nFlags, CPoint point);//释放鼠标捕捉OnMouseMove(UINT nFlags, CPoint point);//对鼠标移动的反应OnKeyDown();//实现对键盘的反应,这里只处理用Shift+D删除点下面的函数实现下拉菜单地图里面的子菜单的反应:OnOpen();//实现对菜单栏“打开地图”的反应OnSave();//实现对菜单栏“保存地图”的反应OnRandom();//实现对菜单栏“随机生成”的反应OnDelete();//实现对菜单栏“删除城市”的反应OnClear();//实现对菜单栏“清空地图”的反应OnExit();//实现对菜单栏“退出”的反应下面函数实现计算功能:OnStartcomput();//实现对菜单栏“开始计算” 的反应OnStopcomput();//实现对菜单栏“停止运算”的反应下面的函数实现背景菜单的功能:OnSetbk();//实现对菜单栏“设置背景”的反应OnShowback();//实现对菜单栏“显示背景”的反应OnHelp();//实现对菜单栏“帮助的反应”OnTimer(UINT nIDEvent);//计时器,每隔一段时间做出的反应除了这三个类以外,还有像一些产生对话框需要的类,例如:RandCreateDlg等2、主程序运行界面3、程序结束界面2.3详细设计1、通过我们初步的分析,研究过旅行商的算法(包括蚁群算法,变异算法,神经网络算法等),决定使用变异算法,并进入详细设计阶段,详细设计阶段分为界面设计和代码设计,开始我们打算利用VB实现程序的,但是由于程序中大量的使用到了指针,使用VB不能满足程序的需要,我们选择了C++,虽然我们几个并不是很懂,但是由于我们中有几个已经接触过,所以我们也就拿了几本书,边学边做。

2、首先,我们的程序中的类有:1)CityMap类,因为这个类这是我们程序中最重要的一个类,里面包含了我们程序使用的绝大多数函数。

2)Point类,因为距离在平面图上的表示并不容易,我们选择了利用点坐标定义点,然后通过点坐标计算距离矩阵。

这就设计到了我们程序中最基本的一个类,Point类。

其中属性有x,y坐标,行为有求距离,以便于距离矩阵的求出。

3)TravellerDlg类,这个类是程序主界面的主要控制程序,对主界面的程序做出相应的反应,包括鼠标,包括,键盘,包括菜单的单击属性。

主要是用MFC实现,通过MFC来实现界面的布局。

主要方法有:3、主要函数解释1)变异函数:Variant,这是变异函数得来的原因,实现了有父代到子代的变异顺次交换:将i到j之间的点依次与m到n之间的点进行交换,交换函数如下:tmp = gdest.index[m];gdest.index[m] = gdest.index[n];gdest.index[n] = tmp;按块交换:将第i 块和第m 块交换,将第j 块和第m 块交换,每一块中含有的元素不定,每次都是随机生成。

用下面函数实现函数如下:memcpy(ptemp, gdest.index, n * sizeof(int));其中ptemp 为暂存区为目标区,gdest.index 表示原目标,n 表示要复制的长度。

详细代码见附录。

2)距离矩阵的计算函数,ComputeDistanceMatrix(),根据点坐标,求得距离矩阵,便于计算使用。

由于距离问题的特殊性,其距离矩阵为一个对称矩阵,且对角线上的都为0。

所以生成的矩阵格式如下:(1,(2,(3,(4,(2,(3,(3,(4,(5,(5,(5,(5,(5,(4,(4,3)// 四边形优化,此函数主要实现了图的每次优化,为一个调整函数。

通过移动线,构造平行四边形,然后通过钝角的证明,利用原理两边之和等于第三边上的中线的两倍,则该三角形为直角三角形,如果d0 + d2 > d1 + d3,则形成的角比为锐角;如果是对钝角,则说明该四边形不用优化,如果不是则将该四边形进行优化,因为要构成一个闭合的最短回路则要是所有的这些构成整个环路的的这些四边形都是钝角。

2.4调试分析1、此程序由于设计到的问题比较繁琐,开始是我们打算使用中国邮路的算法进行求解,但是由于那个算法对于数量较大时效率太低,我们选择了变异算法,当然程序的复杂度也大大的增加。

又由于我们的程序使用MFC 来实现,而且我们以前也都没有接触过MFC ,只是对C++的语法有所了解,但是经过我们小组的努力,边学边用,并借助网络,最终将我们的程序跑通,当然我们的程序还有很多的问题,但是由于时间而且我们的学到的东西有限,程序也就能够运行到现在的情况。

相关文档
最新文档