1、超市选址1. 课程设计目的通过对数据结构中权值的计算和弗洛伊德算法的学习,将其在课程设计中实现、表达出来,数据结构是计算机软件和计算机应用专业的核心课程之一,在众多的计算机系统软件和应用软件中都要用到各种数据结构。在数据结构中,在设计中可以处理数值计算问题 、选取合适数据结构、写出更有效的算法。计算机核心课程,程序=算法+数据结构,数据结构的重要性可见一斑。事实上,想要写出优美高效的代码,数据结构的知识一定要有的,学习的过程中更重要的是去理解它的思想。2.设计方案论证 2.1 设计思路核心问题: 求最短路径(选址的要求就是超市到各单位权值之和最少)数据模型(逻辑结构): 带权有向图 (权值计算
2、: 距离*频度)存储结构: typedef struct string vexsMAX_VERTEX_SIZE; int arcsMAX_VERTEX_SIZEMAX_VERTEX_SIZE; int vexnum;/ ,arcnum;MGraph;核心算法: Floyd算法(弗洛伊德算法-每一对顶点之间的最短路径) 输入数据: 各单位名称,距离,频度,单位个数输出数据: 所选单位名称总体思路:如果超市是要选在某个单位,那么先用floyd算法得出各顶点间的最短距离/最小权值。 假设顶点个数有n个,那么就得到n*n的一张表格,arcs(i,j)表示i单位到j单位的最短距离/最小权值 ,这张表格中
3、和最小的那一行(假设为第t行),那么超市选在t单位处就是最优解。2.2设计方法Floyd算法利用动态规划思想,通过把问题分解为子问题来解决任意两点见的最短路径问题。设G=(V, E, w)是一个带权有向图,其边V=v1, v2, , vn。对于kn,考虑其结点V的一个子集。对于V中任何两个结点vi、vj,考虑从vi到vj的中间结点都在vk中的所有路径,设该路径是其中最短的,并设它的路径长度为最短路径长度。如果结点vk不在从vi到vj的最短路径上,则;反之则可以把分为两段,其中一段从vi到vk,另一段从vk到vj,这样便得到表达式。上述讨论可以归纳为如下递归式:算法结构图,如图1NY图1 算法结
4、构图2.3详细设计让所有路径加上中间顶点1,取Aij与Ai1+A1j中较小的值作Aij的新值,完成后得到A(1),如此进行下去,当第k步完成后,A(k)ij表示从i到就且路径上的中间顶点的路径的序号小于或等于k的最短路径长度。当第n-1步完成后,得到A(n-1),A(n-1)即所求结果。A(n-1)ij表示从i到j且路径上的中点顶点的序号小于或等于n-1的最短路径长度,即A(n-1)ij表示从i到j的最短路径长度。2.3.1结构体的定义typedef struct Vextype vexsMAXVEXMAXVEX; /单位名称(顶点信息); int adjMAXVEXMAXVEX; /单位之间
5、的相通情况(是否有边); int disMAXVEXMAXVEX; /单位间距离(边的长度); int fMAXVEX; /各单位去超市的频率; int n; /顶点数和边数; int e;Mgraph;2.3.2带权有向图求最短路径floyd算法void Floyed(Mgraph *G) /带权有向图求最短路径floyd算法 int AMAXVEXMAXVEX,pathMAXVEXMAXVEX; int i,j,k,pre; int countMAXVEX; for(i=0;in;i+) /初始化A和path数组 for(j=0;jdisij; pathij=-1; counti=0; f
6、or(k=0;k(Aik+Akj) /从i经j到k的一条路径更短 Aij=Aik+Akj; pathij=k; coutendlFloyed算法求解如下:endl; if(i!=j) cout; if(Aij=INF) if(i! cout不存在路径n else cout路径长度为:Aij路径为:* pre=pathij; while(pre!=-1) preAii) k=i;超市的最佳地址为:vexsk3.运行结果及分析3.1 运行结果分别输入单位个数、单位的路径输和各单位的名称,如图2所示图2单位名称输入各个相通单位和想通两单位见的距离,如图3所示图3各相通单位间的距离根据Floyed算法
7、求解A,B,C,D的路径长度,如图4,5,6,7所示图4单位A的对其他单位的路径长度图5单位B的对其他单位的路径长度图6单位C的对其他单位的路径长度图7单位D的对其他单位的路径长度根据路径长度得出最佳路径,如图8所示图8最佳地址3.2运行结果分析有两个权值:各单位到超市的距离及各单位人去超市的频度。这使得图的建立出现了困难,经过分析这两个值可以合并为一个权值即distance*frequency;这样就使得图的建立轻而易举。利用floyd算法求出每一对顶点之间的最短路径。选出最短路径,即最佳地点应使其到其他单权值最小。注意:每比较一次path应清0一次(Path=0)。4.设计体会在本次数据结
8、构课程设计,对我来说这是一项不小的挑战,它不仅检验了我的学习情况,也考验了我的意志力,让我有了很大的收获! 通过一学期的学习,我知道数据结构是一门纯属于设计的科目,它需用把理论变为上机调试。在学习科目的第一节课起,老师就为我们阐述了它的重要性。它对我来说具有一定的难度。它是其它编程语言的一门基本学科。之前我刚学习数据结构时感觉很吃力,因为书上都只是提供一些通用的结构算法,并没有具体的题目和完整的程序来让我体会数据结构在程序中所体现的作用。但是经过自己到图书馆借阅相应的书籍,并且在每次上机时大胆实践,我逐渐体会到数据结构是计算机科学与技术专业的一门核心专业基础课程,在我们专业的课程体系中起着承上
9、启下的作用,学好数据结构对于提高理论认知水平和实践能力有着极为重要的作用。学习数据结构的最终目的是为了获得求解问题的能力。对于现实世界中的问题,应该能从中抽象出一个适当的数学模型,该数学模型在计算机内部用相应的数据结构来表示,然后设计一个解此数学模型的算法,再进行编程调试,最后获得问题的解答。 书本知识用于实际应用,才是我的目标,这次课程设计给了我锻炼自我突破自己的机会。 通过这次数据结构课程实践,我对数据结构这门课程有了更深的认识和体会,同时实践的成功极大增强了我对继续学习相关知识的信心和兴趣!5.参考文献1 李春葆.数据结构教程上机实验指导M.北京:清华大学出版社,2006.7:P103-
10、1102 张群哲. 数据结构(C语言版)M. 西安: 西安电子科技大学出版社,2008.2:P28-433 严蔚敏等数据结构题集M北京:清华大学出版社,2006.8:P89904 王士元C高级实用程序设计M北京:清华大学出版社,20076 :P29435 陈明. 数据结构(C语言版)M.北京:清华大学出版社,2006.3:P53-646 顾为兵, 尹东, 袁平波, 朱明.数据结构及应用算法M. 合肥: 中国科学技术大学出版社,2008.9:P33-367 李春葆 数据结构教程M. 北京:清华大学出版社,2006.10:P5659附录:源程序代码#include stdio.hstdlib.ht
11、ime.h#include malloc.hiostream.h#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1#define INF 32767const int MAXVEX=100;typedef char Vextype;void CreatMgraph(Mgraph *G) int i,j,k; printf(请输入单位个数:); scanf(%d,&(G-n);请输入单位间的路径数:e);请输入单位名称: printf(请输入第%d个单位名称:,i);%svexsi);i+) /结
12、构体的初始化; G-adjij=0;disij=0;fi=0;e;k+)请输入相通的两单位 (输入格式:i,j):%d,%di,&j);/在距离上体现为无向;请输入相同两个单位间的距离(格式:dis):disij); G-adjij=1;adjji=1;disji=G-请输入第%d个单位去超市的相对频率:,k);fk);i+) /以距离和频率之积作为权值;disij*=G-fi; /最终权值非完全无向; if(G-adjij=0&i! G-disij=INF; /以下为选择总体最优过程,然后确址; k=0; void main() Mgraph *Gh=NULL; Gh=(Mgraph *)malloc(sizeof(Mgraph); CreatMgraph(Gh); Floyed(Gh); system(pause
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1