1、学校超市选址问题学生姓名专业班级学号题 目学校超市选址问题课题性质工程设计课题来源自选课题指导教师同组姓名无主要内容对于某一学校超市,其她各单位到其得距离不同,同时各单位人员去超市得频度也不同。请为超市选址,要求实现总体最优。任务要求1、实现公司到超市距离,频率最优.2、 确定超市位置,要求实现总体最优.参考文献C程序设计第三版 谭浩强 著 清华大学出版社数据结构(C语言版) 严蔚敏著 清华大学出版社数据结构及应用沈华 等编著 机械工业出版社审查意见指导教师签字:教研室主任签字: 一、需求分析 )核心问题: 求最短路径(选址得要求就就是超市到各单位权值之与最少)数据模型(逻辑结构):带权有向图
2、 (权值计算: 距离频度)3)存储结构: typed strutstringvesMAX_ERTEXSIZ;int arsXVERTE_IZEMAX_VETEX_SIZE;it vexm;/ ,rcm;MGrap; 核心算法: loy算法(弗洛伊德算法每一对顶点之间得最短路径) 输入数据: 各单位名称,距离,频度,单位个数输出数据: 所选单位名称。总体思路: 如果超市就是要选在某个单位,那么先用floyd算法得出各顶点间得最短距离/最小权值。 假设顶点个数有n个,那么就得到n*n得一张表格,as(i,)表示单位到j单位得最短距离最小权值 , 这张表格中与最小得那一行(假设为第t行),那么超市选
3、在t单位处就就是最优解.2 运行环境 isal Sdio C+、indows Vsta/2003/XP3 概要设计Flo算法利用动态规划思想,通过把问题分解为子问题来解决任意两点见得最短路径问题。设=(V, , w)就是一个带权有向图,其边Vv1, v2, ,vn。对于kn,考虑其结点V得一个子集。对于中任何两个结点vi、v,考虑从vi到vj得中间结点都在k中得所有路径,设该路径就是其中最短得,并设它得路径长度为最短路径长度.如果结点v不在从v到vj得最短路径上,则;反之则可以把分为两段,其中一段从vi到vk,另一段从k到v,这样便得到表达式.上述讨论可以归纳为如下递归式:原问题转化为对每个i
4、与求,或者说求矩阵开始流程图Main()输入基本信息GreatMgraph(Gh)建立邻接矩阵得存储结构Floyd算法NYAij=INF,i!=ji到j不存在路径Floyed(Gh)输出i-j得路径与路径长度输出超市得最佳地址:i结束 详细设计第一步,让所有路径加上中间顶点,取Aij与Ai+A1j中较小得值作Aij得新值,完成后得到A(1),如此进行下去,当第步完成后,A(k)ij表示从i到就且路径上得中间顶点得路径得序号小于或等于k得最短路径长度。当第n1步完成后,得到A(-1),A(n-1)即所求结果。A(-1)ij表示从i到j且路径上得中点顶点得序号小于或等于-1得最短路径长度,即A(n
5、1)j表示从i到j得最短路径长度。4、1头文件与变量设定 incld sring、inlude stdi、hilue stdb、h#includ tie、hncude allc、hiclud efine TU 1#dfne LSE0#efie OK 1#deineERROR defineERFLOW 1efine NF 32767const in MAXEX=10;typefcarVextype;、2结构体得定义typedef srcVexype vexsMAXVEXMAVEX; /单位名称(顶点信息);n adMAXEXMAXVE;/单位之间得相通情况(就是否有边);it isMXVEXMA
6、XVE;/单位间距离(边得长度);in fMXVEX;/各单位去超市得频率;int n;/顶点数与边数; e;grph;4、3变量得输入oi eatMgrah(raph *G) int i,j,k;prntf(”请输入单位个数:);scanf(d”,(G-n));pint(”请输入单位间得路径数:n);scnf(”d,(-e);rintf(”请输入单位名称:n);fr(i=0;ivexs);for(i=;n;i+) /结构体得初始化;for(=0;jG-n;j+)-adjij=;-disij=;-fi=0;for(k=;e;k+)rtf(请输入相通得两单位 (输入格式:i,):n”);scan
7、f(%,d,i,j);/在距离上体现为无向;prntf(请输入相同两个单位间得距离(格式:dis):);scanf(”%,(-diij);G-ad=1;Gadji=1;Gisji=Gdsi;fr(k=0;kn;k+)pri(”请输入第%d个单位去超市得相对频率:n”,k);caf(”d”,(fk);o(i=0;iGn;i+) /以距离与频率之积作为权值;fo(j=0;jdisjG-fi; /最终权值非完全无向; (Gadjij=0&!=j)Gdisij=INF;4、4带权有向图求最短路径flyd算法vi Floy(Mgrap *G) /带权有向图求最短路径floyd算法in AMAXVXMAV
8、EX,patMAVXMEX;i i,j,k,; counMAXVEX;fo(=0;iG-n;i+) /初始化与at数组for(j=0;j;j+) /置初值;Aij=Gdsj;phi=-1;coni=0;fo(k=;kn;k+) 代表运算步骤for(=0;;i+)for(j=;G-n;j+)if(Aij(Aik+Akj)) /从i经j到k得一条路径更短Aij=Aik+Akj;pathij=k;cuendlFloyed算法求解如下:ndl;fr(i=;in;i+)for(j=0;jn;j+)i(!=j)cout j”;f(Aij=NF)if(i!=j)cot不存在路径”nndl;elsecout路
9、径长度为:Ain;cout路径为:i”*;pre=pathij;while(pre!=1)coutpe”n;prpathrj;utjendl; /以下为选择总体最优过程,然后确址;r(i0;i-n;i+)for(=0;n;j+)(j=IF)counti0;eecoui=1;fr(i=;iG-n;i)f(couni)fr(j=0;j;i)if(cunt)if(AkkAii)ki;cout超市得最佳地址为:”-vexskendl;4、5主函数模块voidmain()Mrah G=NULL;h=(grph *)mallc(size(grph));CreatMra(G);Floye(Gh);ystem
10、(pause);5 调试分析 5、本题目得关键点之一:有两个权值:各单位到超市得距离及各单位人去超市得频度。这使得图得建立出现了困难,经过分析这两个值可以合并为一个权值即distcerequency;这样就使得图得建立轻而易举。5、本题目得关键点之二: 利用fld算法求出每一对顶点之间得最短路径.5、3本题目得关键点之三: 选出最短路径,即最佳地点应使其到其她单位权值最小.注意:每比较一次pat应清0一次(Path=0)。6 设计程序如下:incudesring、#inlude sdio、hinlude stib、h#include n));pintf(请输入单位间得路径数:n);sanf(”
11、,(G-e);pintf(请输入单位名称:);or(=0;n;+)rin(请输入第%d个单位名称:,i);scnf(s,Gvexsi);fr(=;iG-n;i+) /结构体得初始化;for(=0;jn;j+)Gjj0;G-disij=0;Gi=0;for(k0;ke;k+)pntf(请输入相通得两单位 (输入格式:i,j):);saf(%d,%d”,&,j);/在距离上体现为无向;ptf(请输入相同两个单位间得距离(格式:ds):n”);canf(”%,&(G-dii);Gadij=1;Gajji=1;-disji-dsij;for(k;kG;k+)pintf(”请输入第d个单位去超市得相对频
12、率:n”,k);scanf(”%d,&(Gk);for(i=0;;i+) /以距离与频率之积作为权值;for(=0;jdiij=INF;voi Floy(raph*G) /带权有向图求最短路径floyd算法t AAXVEXMXVEX,pathMAXVEXMAEX;in i,j,k,pre;icountMAVEX;or(i=0;Gn;i+) /初始化A与ah数组fr(j=0;jGn;+) /置初值;Aij=dsj;pathj=-1;couti=0;or(k=0;-;k+) /k代表运算步骤for(i=;iGn;i+)for(j=0;jG;j+)if(Ai(+Akj)) /从i经j到得一条路径更短
13、Aj=Ak+j;pthij=k;couenFloyd算法求解如下:ed;for(i=;iG;i+)for(j=;n;j+)f(i!=j)cout” ”-j;”;f(Aj=INF)(i!=)cut不存在路径”edl;elscout”路径长度为:i”n;cot”路径为:”i;pr=atij;while(pe!=-1)cutpren;pre=patpre;cotn;+)i(i!)Aii+=Aj;=0;fr(i=0;iii)k=i;cut超市得最佳地址为:”Gvekend;vod mai()MgraGhNUL;Gh=(grh *)aloc(izeo(Mrp));CeatMgr(Gh);loed();s
14、ytem(pause”);/测试数据:输入:单位个数4单位间得路径数6第0个单位名称A第个单位名称B第2个单位名称C第3个单位名称D相通两单位 之间得距离,1 2,2 3,3 4, ,2 21,3 第0个单位去超市得频率 2第1个单位去超市得频率 第2个单位去超市得频率 3第3个单位去超市得频率 * 测试结果 7、1输入 、2输出参考文献: 1、C程序设计第三版 谭浩强 著 清华大学出版社 2、数据结构(C语言版) 严蔚敏著 清华大学出版社 3、数据结构及应用沈华 等编著机械工业出版社总 结 终于完成了本次数据结构课程设计,对我来说这就是一项不小得挑战,它不仅检验了我得学习情况,也考验了我得意
15、志力,让我有了很大得收获! 通过一学期得学习,我知道数据结构就是一门纯属于设计得科目,它需用把理论变为上机调试。在学习科目得第一节课起,老师就为我们阐述了它得重要性。它对我来说具有一定得难度。它就是其它编程语言得一门基本学科.之前我刚学习数据结构时感觉很吃力,因为书上都只就是提供一些通用得结构算法,并没有具体得题目与完整得程序来让我体会数据结构在程序中所体现得作用。但就是经过自己到图书馆借阅相应得书籍,并且在每次上机时大胆实践,我逐渐体会到数据结构就是计算机科学与技术专业得一门核心专业基础课程,在我们专业得课程体系中起着承上启下得作用,学好数据结构对于提高理论认知水平与实践能力有着极为重要得作用。学习数据结构得最终目得就是为了获得求解问题得能力。对于现实世界中得问题,应该能从中抽象出一个适当得数学模型,该数学模型在计算机内部用相应得数据结构来表示,然后设计一个解此数学模型得算法,再进行编程调试,最后获得问题得解答。 书本知识用于实际应用,才就是我得目标,这次课程设计给了我锻炼自我突破自己得机会. 通过这次数据结构课程实践,我对数据结构这门课程有了更深得认识与体会,同时实践得成功极大增强了我对继续学习相关知识得信心与兴趣!