数据结构课程设计学校超市选址问题

合集下载

数据结构课程设计学校超市选址问题

数据结构课程设计学校超市选址问题

一、需求分析1)核心问题:求最短路径(选址得要求就就是超市到各单位权值之与最少)2)数据模型(逻辑结构):带权有向图(权值计算:距离*频度)3)存储结构: typedef struct{string vexs[MAX_VERTEX_SIZE];ﻩint arcs[MAX_VERTEX_SIZE][MAX_VERTEX_SIZE];int vexnum;// ,arcnum;}MGraph;核心算法:Floyd算法(弗洛伊德算法—每一对顶点之间得最短路径)输入数据:各单位名称,距离,频度,单位个数.输出数据:所选单位名称。

总体思路:如果超市就是要选在某个单位,那么先用floyd算法得出各顶点间得最短距离/最小权值。

假设顶点个数有n个,那么就得到n*n得一张表格,arcs(i,j)表示i单位到j单位得最短距离/最小权值 , 这张表格中与最小得那一行(假设为第t行),那么超市选在t单位处就就是最优解.2 运行环境Visual Stdio C++6、0ﻩWindows Vista/2003/XP3 概要设计Floyd算法利用动态规划思想,通过把问题分解为子问题来解决任意两点见得最短路径问题。

设G=(V, E,w)就是一个带权有向图,其边V={v1, v2, …,vn}。

对于k≤n,考虑其结点V得一个子集。

对于V中任何两个结点vi、vj,考虑从vi到vj得中间结点都在vk中得所有路径,设该路径就是其中最短得,并设它得路径长度为最短路径长度.如果结点vk不在从vi到vj得最短路径上,则;反之则可以把分为两段,其中一段从vi到vk,另一段从vk到vj,这样便得到表达式.上述讨论可以归纳为如下递归式:原问题转化为对每个i与j求,或者说求矩阵#include 〈stdio、h〉#include <stdlib、h>#include<time、h〉#include "malloc、h"#include <iostream、h>#define TURE 1#define FALSE0#define OK 1#define ERROR 0#defineOVERFLOW -1#define INF 32767const int MAXVEX=100;typedef char V extype;4、2结构体得定义typedef struct{ﻩVextype vexs[MAXVEX][MAXVEX]; //单位名称(顶点信息);int adj[MAXVEX][MAXVEX];ﻩ//单位之间得相通情况(就是否有边);int dis[MAXVEX][MAXVEX];ﻩﻩﻩﻩ//单位间距离(边得长度);ﻩint f[MAXVEX];ﻩﻩﻩﻩﻩﻩ//各单位去超市得频率;int n;ﻩﻩﻩﻩﻩ//顶点数与边数;ﻩint e;}Mgraph;4、3变量得输入voidCreatMgraph(Mgraph *G){int i,j,k;printf(”请输入单位个数:\n");ﻩscanf("%d”,&(G-〉n));printf(”请输入单位间得路径数:\n");scanf(”%d",&(G-〉e));ﻩprintf(”请输入单位名称:\n");for(i=0;i<G->n;i++){ﻩprintf("请输入第%d个单位名称:\n",i);scanf("%s",&G->vexs[i]);}ﻩfor(i=0;i〈G->n;i++)ﻩﻩ //结构体得初始化;ﻩﻩfor(j=0;j〈G-〉n;j++)ﻩﻩ{ﻩﻩG->adj[i][j]=0;ﻩG-〉dis[i][j]=0;ﻩG-〉f[i]=0;ﻩ}for(k=0;k〈G-〉e;k++){ﻩprintf("请输入相通得两单位 (输入格式:i,j):\n”);ﻩﻩscanf("%d,%d",&i,&j);//在距离上体现为无向;ﻩﻩprintf("请输入相同两个单位间得距离(格式:dis):\n");ﻩscanf(”%d",&(G-〉dis[i][j]));ﻩﻩG->adj[i][j]=1;ﻩG-〉adj[j][i]=1;ﻩG->dis[j][i]=G->dis[i][j];ﻩ}ﻩfor(k=0;k<G-〉n;k++)ﻩ{ﻩprintf(”请输入第%d个单位去超市得相对频率:\n”,k);ﻩscanf(”%d”,&(G-〉f[k]));ﻩ}ﻩfor(i=0;i<G—>n;i++)ﻩﻩﻩﻩﻩ //以距离与频率之积作为权值;ﻩfor(j=0;j<G—〉n;j++){G->dis[i][j]*=G-〉f[i];//最终权值非完全无向;if(G—>adj[i][j]==0&&i!=j)ﻩﻩﻩG->dis[i][j]=INF;ﻩﻩ}}4、4带权有向图求最短路径floyd算法void Floyed(Mgraph *G)//带权有向图求最短路径floyd算法{ﻩint A[MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];ﻩint i,j,k,pre;int count[MAXVEX];for(i=0;i〈G->n;i++) //初始化A[][]与path[][]数组for(j=0;j〈G—〉n;j++) //置初值;ﻩﻩ{ﻩﻩA[i][j]=G—>dis[i][j];ﻩﻩﻩpath[i][j]=-1;ﻩﻩﻩcount[i]=0;}ﻩfor(k=0;k<G—>n;k++) //k代表运算步骤{ﻩfor(i=0;i<G->n;i++)for(j=0;j〈G->n;j++)ﻩﻩif(A[i][j]>(A[i][k]+A[k][j])) //从i经j到k得一条路径更短ﻩﻩﻩﻩ{ﻩﻩﻩA[i][j]=A[i][k]+A[k][j];ﻩpath[i][j]=k;ﻩﻩﻩﻩ}ﻩ}cout<〈endl<<"Floyed算法求解如下:"〈<endl;ﻩfor(i=0;i<G—>n;i++)for(j=0;j<G-〉n;j++)ﻩ{ﻩﻩﻩif(i!=j)ﻩ{ﻩﻩcout<〈" "〈<i<〈”—>"〈〈j<<”;";if(A[i][j]==INF)ﻩﻩ{ﻩﻩﻩﻩif(i!=j)ﻩcout〈<"不存在路径”<<”\n"<<endl;ﻩ}ﻩelseﻩﻩﻩ{ﻩﻩﻩcout<〈"路径长度为:"<<A[i][j]〈<"\n";ﻩﻩﻩcout〈<"路径为:"<〈i〈〈”*";ﻩﻩﻩﻩpre=path[i][j];ﻩwhile(pre!=—1)ﻩﻩ{ﻩﻩﻩcout<<pre<<”\n";ﻩﻩﻩﻩpre=path[pre][j];ﻩﻩ}ﻩﻩﻩcout〈〈j〈〈endl;ﻩﻩ}ﻩﻩﻩ}}//以下为选择总体最优过程,然后确址;ﻩfor(i=0;i<G->n;i++)ﻩfor(j=0;j〈G-〉n;j++)ﻩ{ﻩﻩif(A[i][j]==INF)ﻩcount[i]=0;ﻩelseﻩcount[i]=1;}ﻩfor(i=0;i<G-〉n;i++)ﻩif(count[i]){ﻩfor(j=0;j<G-〉n;j++)ﻩif(i!=j)A[i][i]+=A[j][i];}k=0;for(i=0;i〈G—>n;i++)ﻩ{ﻩif(count[i])ﻩﻩif(A[k][k]>A[i][i])ﻩﻩﻩk=i;}ﻩcout<<"超市得最佳地址为:”<<G-〉vexs[k]<<endl;}4、5主函数模块void main(){Mgraph *Gh=NULL;Gh=(Mgraph *)malloc(sizeof(Mgraph));ﻩCreatMgraph(Gh);Floyed(Gh);ﻩsystem("pause");}5 调试分析5、1本题目得关键点之一:有两个权值:各单位到超市得距离及各单位人去超市得频度。

校园超市定位

校园超市定位

校园超市定位校园超市是一个为学生提供便捷购物服务的重要场所。

准确的定位校园超市对于学生的生活和学习都具有重要意义。

本文将详细介绍校园超市的定位标准和相关数据,以确保准确满足任务名称描述的内容需求。

一、校园超市的定位标准1. 位置便利性:校园超市应位于学生聚集区域附近,如学生宿舍区、教学楼附近等,方便学生随时购物。

2. 超市面积:校园超市的面积应适中,既能满足学生的购物需求,又不会过于拥挤。

一般来说,校园超市的面积应在200-500平方米之间。

3. 商品种类:校园超市应提供丰富的商品种类,包括食品、饮料、日用品、文具等,以满足学生的各种需求。

4. 价格合理性:校园超市应以学生为主要消费群体,价格应相对较低,以吸引学生购买。

5. 服务质量:校园超市的员工应具备良好的服务意识,提供友好、高效的服务,为学生提供良好的购物体验。

二、校园超市定位的相关数据1. 位置便利性:校园超市应位于学生聚集区域附近,如学生宿舍区、教学楼附近等。

根据调查数据显示,学生宿舍区是校园超市最佳的定位地点之一,因为学生宿舍区是学生日常生活的重要场所,购物需求较大。

2. 超市面积:校园超市的面积应适中,既能满足学生的购物需求,又不会过于拥挤。

根据统计数据显示,校园超市面积在200-500平方米之间的超市更受学生欢迎,因为这样的超市既能提供丰富的商品种类,又能提供舒适的购物环境。

3. 商品种类:校园超市应提供丰富的商品种类,以满足学生的各种需求。

根据市场调研数据显示,学生最常购买的商品种类包括方便食品、饮料、零食、日用品、文具等。

因此,校园超市应注重这些商品种类的供应,以满足学生的需求。

4. 价格合理性:校园超市应以学生为主要消费群体,价格应相对较低,以吸引学生购买。

根据价格调查数据显示,校园超市中价格相对较低的商品更受学生欢迎,因为学生通常具有有限的经济能力,更注重价格的实惠性。

5. 服务质量:校园超市的员工应具备良好的服务意识,提供友好、高效的服务,为学生提供良好的购物体验。

【GIS】空间分析——学校选址

【GIS】空间分析——学校选址

【GIS】空间分析——学校选址BEGIN合理的学校空间位置布局,有利于学生的上课与生活。

学校的选址问题需要考虑地理位置、学生娱乐场所配套、与现有学校的距离间隔等因素,从总体上把握这些因素能够确定出适宜性比较好的学校选址区。

实验介绍实验目的:通过练习,熟悉ArcGIS栅格数据距离制图、成本距离加权、数据重分类、多层面合并等空间分析功能,熟练掌握利用ArcGIS空间分析功能,分析和结果类似学校选址的实际应用问题。

实验数据:(1) landuse (土地利用图):(2) dem (地面高程图);(3) rec_sites (娱乐场所分布图);(4) school (现有学校分布图)。

实验要求:(1)新学校选址需注意如下几点:①新学校应位于地势较平坦处;②新学校的建立应结合现有土地利用类型综合考虑,选择成本不高的区域③新学校应该与现有娱乐设施相匹配,学校距离这此市越近越好④新学校应避开现有学校,合理分布。

(2)数据层权重比为:距离娱乐设施占0.5,距离学校占0.25,土地利用类型和地势位置因素各占0.125。

(3)实现过程运用ArcGis的扩展模块(extension)中的空间分析部分功能,具体包括:坡度计算、直线距离制图功能、重分类及栅格计算器等功能。

激活扩展模块运行ArcMp。

如果Spatal Analyst模块未能激活,单击【自定义】→【扩展模块】,选择Spatial Analyst, 单击【关闭】。

打开工程文件打开地图文档在ArcMap 主菜单上选择【文件】→【打开】,选择E: \Chp8\ Exl \ school. mx。

空间分析环境设置设置空间分析环境选中ArcToolbox,右键选择【环境】打开环境设置对话框,设置相关参数。

①展开【工作空间】,设置工作路径为: E: \Chp8\ExlResult\(自己设置)。

②展开【处理范围】在范围下拉框中选择“与图层landuse相同”;③展开【栅格格分析】,在像元大小下拉框中选择“与图层landuse相同”。

《算法设计综合实训》题目讲解

《算法设计综合实训》题目讲解

算法设计综合实训题目0.逆序数字(借助栈)编写一个函数,接收一个4位整数值,返回这个数中数字逆序后的结果值。

例如,给定数7631,函数返回1367.输入:第一行一个正整数T(T<=10),表示有T组测试数据; 以下T行,每行一个非负的整数N。

输出:共T行,对于每组输入数据输出一行,即数字逆序后的结果值。

样本输入:3763110185158样本输出:1367810185151.人见人爱A+B这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。

输入:输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。

题目保证所有的数据合法。

输出:对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:分和秒的取值范围在0-59),每个输出占一行,并且所有的部分都可以用32位整数表示。

样本输入:21 2 3 4 5 634 45 56 12 23 34样本输出:5 7 947 9 302.敲七【问题描述】输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)【要求】【数据输入】一个整数N。

(N不大于30000)【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。

【样例输入】20【样例输出】714173.统计同成绩学生人数问题【问题描述】读入N名学生的成绩,将获得某一给定分数的学生人数输出。

【要求】【数据输入】测试输入包含若干测试用例,每个测试用例的格式为第1行:N第2行:N名学生的成绩,相邻两数字用一个空格间隔。

第3行:给定分数当读到N=0时输入结束。

其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。

校园超市集中配送的选址分析

校园超市集中配送的选址分析

校园超市集中配送的选址分析校园超市的集中配送是以校园为核心,为学生和教职工提供便利的购物服务。

选址分析是决定校园超市集中配送成败的重要因素之一。

选址分析涉及到诸多方面,如校园的地理位置、人流密集的区域、交通便利性、竞争对手的分布等。

本文将对校园超市集中配送的选址分析进行深入探讨。

校园的地理位置是选择集中配送的关键因素之一。

校园超市集中配送的目的是为了覆盖学校内的各个角落,因此校园的地理位置必须处于学生和教职工活动频繁的区域。

一般来说,校园超市集中配送的位置应该位于学生宿舍区、教学楼周边或者学生活动中心附近,以便学生在上下课或下晚自习时能够方便地购买日常用品。

还需要考虑到校园内的主要交通道路,以确保配送员能够快速到达指定地点。

人流密集的区域也是选址分析的重要考量因素。

选择集中配送的地点需要考虑到学生和教职工聚集的区域,以保证配送的效率和覆盖范围。

在选择配送点时,需要注意选择学校内人流密集的地段,如图书馆、食堂、活动中心等地方。

这样一来,校园超市能够更好地服务学生和教职工,提高用户体验。

交通便利性也是影响选址分析的重要因素之一。

为了保证集中配送运营的顺利进行,配送点的选址必须考虑到交通便利性。

配送点应该尽可能靠近传统的交通枢纽,比如公交车站或者校园内的停车场。

配送点的选址应该避免交通拥堵的地带,以保证配送员的送货效率。

需要考虑到校园内的非机动车道和步行道,以满足配送员步行配送货物的需求。

除了以上的因素外,竞争对手的分布也是选址分析的考量因素之一。

在选择集中配送的地点时,需要考虑到周边的校园超市竞争格局,以避免重复竞争和资源投入。

在校园内开设集中配送点时,需要充分考虑到周边已有的校园超市分布情况,避免在过多的竞争对手中分食有限的市场份额。

校园超市集中配送的选址分析需要综合考虑地理位置、人流密集的区域、交通便利性和竞争对手的分布等因素。

只有全面考虑这些因素,才能选择出最适合的地点进行集中配送,从而为学生和教职工提供更加便捷的购物体验。

配送中心选址设计以沃尔玛超市为例

配送中心选址设计以沃尔玛超市为例

配送中心选址设计以沃尔玛超市为例引言在现代零售业中,配送中心的选址设计对于优化运营效率和降低成本非常重要。

本文将以沃尔玛超市为例,探讨配送中心选址的相关因素和设计原则。

1. 关键因素在选择配送中心的位置时,需要考虑以下几个关键因素:1.1 市场需求首先要分析沃尔玛超市所在地区的市场需求。

衡量市场需求的指标可以包括人口数量、人均收入、购买力等。

根据市场需求的分析,可以确定配送中心的规模和服务范围。

1.2 地理位置配送中心的地理位置对于减少配送时间和成本至关重要。

可行的地理位置应当靠近主要消费市场,并且与供应商之间的距离要尽可能短。

此外,建立在主要交通干线附近的配送中心可以方便产品的运输。

1.3 基础设施配送中心的周围基础设施对于运营效率和成本影响很大。

例如,避免选择交通拥堵的地区,选择周边有配送相关企业的区域,有助于减少运输时间和成本。

1.4 人力资源配送中心的选址也需要考虑人力资源的可用性。

附近有大量劳动力可供挑选,并且具备相关技能的地区对于提高运营效率非常重要。

2. 设计原则在确定配送中心选址时,需要遵循以下设计原则:2.1 高效性配送中心应该被设计成高效率的运营中心。

更加接近主要消费市场的位置,可以减少交通时间和成本。

设计时需要考虑内部的流程优化,包括货物存储、分拣和装载等。

2.2 灵活性配送中心应该具备灵活性,以应对市场需求的变化。

灵活性的设计可以包括可调整仓储空间、灵活布局等。

这样,配送中心可以根据需求进行快速调整,以适应市场变化。

2.3 安全性配送中心的安全性非常重要。

安全设计包括防火、防盗、设备安全等。

此外,考虑到员工的劳动保护,设计时也要充分考虑人身安全。

2.4 可持续性在现代社会,可持续性是一个重要的设计原则。

配送中心的选址应该遵循可持续性原则,例如附近是否有公共交通工具、是否便于回收等。

通过可持续性的设计,可以减少对环境的影响。

3. 沃尔玛超市的案例以沃尔玛超市为例,我们可以进行以下配送中心选址的设计:3.1 市场需求根据沃尔玛超市所在地区的市场需求,我们确定配送中心的规模应该是中等大小,并且服务范围应该覆盖该地区的主要消费市场。

超市选址分析报告

超市选址分析报告

沃尔玛超市弘扬广场店选址分析报告06108221蒋菊仙06108220钱灵威沃尔玛超市是一家即将开张的大型超市,集购物、娱乐、交友以及休闲等多项活动为一体的大型超市。

目前在南京浦口,还并没有出现如此规模的超市。

所以在超市的选址方面下了大功夫。

<一> 新店的地理优势新店地处交通发达,人流量多的弘阳商业街,集购物、休闲、娱乐于一体。

<二> 新店址周围商业环境和竞争店情况一、商业环境1、优势分析:弘阳商业街地处南京市大桥北路48号,鼓扬,浦葛,174路,盐浦线等公交车都由此经过,它背依东南大学成贤学院,南理工,南京信息大学,周边居民,所以人流集散比较大,然而,周边地区至今都没有一个大型超市,这为我们沃尔玛超市提供了一个巨大的市场空间、为市场前期运作提供了一个很好的切入机会。

另外,在此地段开超市可以避开激烈的市场竞争,如家乐福、苏果、大润发等;且此地段地价相对便宜,地价升值空间很大;距离目标顾客近,能够为他们提供一个便利的购物场所。

2、劣势分析:就目前的消费者行为而言,很难经营高档商品。

因为目前消费者似乎已形成一个习惯——高档消费品一般都去市中心买。

因此在此经营,得必须花一定的时间来改变消费者的这种行为,培养他们新的购物习惯。

另外,学生是其主要的购物群体,在此经营会遇到寒暑假期间,学生放假所带来的人流量急剧减少的销售淡季;还有就是目前的周边购物的环境不是很好,周围在搞工程设施,到处是漫天灰尘,且地面肮脏.二、竞争者分析在终端越来越成为众多商家,厂家重视的年代,便利店,超市,百货商场,购物广场,大型卖场等都在各地迅速发展。

这对后来者来说即是机遇,又是挑战。

弘阳商场作为一个即在南京新街口有大量的购物场所,如德基广场,南京新百,中央商场,他们是南京市民主要的购物场所,不光吸纳了市中心的市民,而且也吸引了大量的郊区消费者。

同样,鞋、服也面临着来自城市中心的竞争,这必然会影响弘阳商场的消费者,形成一种远程竞争格局,如果他们在中心城商场购的商品储藏在家里,可以维持他们的一段时间的使用,他们就必然会减少到该商场的购物频率。

数据结构课程设计-校园导航

数据结构课程设计-校园导航

课程设计报告课程名称数据结构课程设计题目校园导航指导教师设计起始日期学院计算机学院系别计算机科学与工程学生姓名班级/学号成绩一、需求分析本次实验设计的任务是实现一个简易的北京信息科技大学的校园导航平面图。

设计要包括下列要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

本课题实现校园多个场所(至少10个)的最短路径求解。

(1)输入的形式和输入值的范围:本系统主要数据类型为字符型char及整形int,char型主要包括单位编号,单位名称,单位简介,功能编号;输入功能编号与单位编号进行操作。

(2 ) 输出的形式:输出则通过已有的信息数据,通过相关的操作输出相应信息。

(3) 程序所能达到的功能:本程序可供任何人使用,主要功能 1.浏览各单位及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看某一单位信息。

(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

a.首先看到的是校园导航系统的菜单:b.查看浏览路线等待输入起始景点:C.选择出发点与目的地等待输入起始景点与目的地编号:d.参看景点信息等待输入景点编号:二、概要设计本系统包含一个文件。

设计分有菜单,显示信息,弗洛伊德算法,迪杰斯特拉算法,查找景点信息等程序段。

主程序为整系统的入口处,菜单主要实现显示系统功能,显示信息主要实现显示景点信息,弗洛伊德算法主要实现求两景点之间最短路径,迪杰斯特拉算法实现求两景点之间最短路径,查找景点信息主要实现显示某一景点信息。

系统首先通过主程序调用void main( );进入系统主菜单函数,根据用户的选择可分别进入:1.浏览各景点及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看景点信息;5.退出系统。

选择“浏览各景点及简介”项,显示十个景点的有关信息,包括景点编号,景点名称,景点简介。

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

学校超市选址问题一、需求分析1)核心问题: 求最短路径(选址的要求就是超市到各单位权值之和最少)2)数据模型(逻辑结构): 带权有向图 (权值计算: 距离*频度)3)存储结构: typedef struct{string vexs[MAX_VERTEX_SIZE];int arcs[MAX_VERTEX_SIZE][MAX_VERTEX_SIZE];int vexnum;// ,arcnum;}MGraph;核心算法: Floyd算法(弗洛伊德算法-每一对顶点之间的最短路径) 输入数据: 各单位名称,距离,频度,单位个数.输出数据: 所选单位名称.总体思路: 如果超市是要选在某个单位,那么先用floyd算法得出各顶点间的最短距离/最小权值。

假设顶点个数有n个,那么就得到n*n的一张表格,arcs(i,j)表示i单位到j单位的最短距离/最小权值 , 这张表格中和最小的那一行(假设为第t行),那么超市选在t单位处就是最优解。

2 运行环境Visual Stdio C++6.0Windows Vista/2003/XP3 概要设计Floyd算法利用动态规划思想,通过把问题分解为子问题来解决任意两点见的最短路径问题。

设G=(V, E, w)是一个带权有向图,其边V={v1, v2, …, vn}。

对于k≤n,考虑其结点V的一个子集。

对于V中任何两个结点vi、vj,考虑从vi到vj的中间结点都在vk中的所有路径,设该路径是其中最短的,并设它的路径长度为最短路径长度。

如果结点vk不在从vi到vj的最短路径上,则;反之则可以把分为两段,其中一段从vi到vk,另一段从vk到vj,这样便得到表达式。

上述讨论可以归纳为如下递归式:原问题转化为对每个i和j求,或者说求矩阵4 详细设计第一步,让所有路径加上中间顶点1,取A[i][j]与A[i][1]+A[1][j]中较小的值作A[i][j]的新值,完成后得到A(1),如此进行下去,当第k步完成后,A (k)[i][j]表示从i到就且路径上的中间顶点的路径的序号小于或等于k的最短路径长度。

当第n-1步完成后,得到A(n-1),A(n-1)即所求结果。

A(n-1)[i][j]表示从i到j且路径上的中点顶点的序号小于或等于n-1的最短路径长度,即A(n-1)[i][j]表示从i到j的最短路径长度。

4.1头文件和变量设定#include <string.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include "malloc.h"#include <iostream.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;4.2结构体的定义typedef struct{Vextype vexs[MAXVEX][MAXVEX]; //单位名称(顶点信息);int adj[MAXVEX][MAXVEX]; //单位之间的相通情况(是否有边);int dis[MAXVEX][MAXVEX]; //单位间距离(边的长度);int f[MAXVEX]; //各单位去超市的频率;int n; //顶点数和边数;int e;}Mgraph;4.3变量的输入void CreatMgraph(Mgraph *G){int i,j,k;printf("请输入单位个数:\n");scanf("%d",&(G->n));printf("请输入单位间的路径数:\n");scanf("%d",&(G->e));printf("请输入单位名称:\n");for(i=0;i<G->n;i++){printf("请输入第%d个单位名称:\n",i);scanf("%s",&G->vexs[i]);}for(i=0;i<G->n;i++) //结构体的初始化;for(j=0;j<G->n;j++){G->adj[i][j]=0;G->dis[i][j]=0;G->f[i]=0;}for(k=0;k<G->e;k++){printf("请输入相通的两单位 (输入格式:i,j):\n");scanf("%d,%d",&i,&j);//在距离上体现为无向;printf("请输入相同两个单位间的距离(格式:dis):\n");scanf("%d",&(G->dis[i][j]));G->adj[i][j]=1;G->adj[j][i]=1;G->dis[j][i]=G->dis[i][j];}for(k=0;k<G->n;k++){printf("请输入第%d个单位去超市的相对频率:\n",k);scanf("%d",&(G->f[k]));}for(i=0;i<G->n;i++) //以距离和频率之积作为权值;for(j=0;j<G->n;j++){G->dis[i][j]*=G->f[i]; //最终权值非完全无向;if(G->adj[i][j]==0&&i!=j)G->dis[i][j]=INF;}}4.4带权有向图求最短路径floyd算法void Floyed(Mgraph *G) //带权有向图求最短路径floyd算法{int A[MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];int i,j,k,pre;int count[MAXVEX];for(i=0;i<G->n;i++) //初始化A[][]和path[][]数组for(j=0;j<G->n;j++) //置初值;{A[i][j]=G->dis[i][j];path[i][j]=-1;count[i]=0;}for(k=0;k<G->n;k++) //k代表运算步骤{for(i=0;i<G->n;i++)for(j=0;j<G->n;j++)if(A[i][j]>(A[i][k]+A[k][j])) //从i经j到k的一条路径更短{A[i][j]=A[i][k]+A[k][j];path[i][j]=k;}}cout<<endl<<"Floyed算法求解如下:"<<endl;for(i=0;i<G->n;i++)for(j=0;j<G->n;j++){if(i!=j){cout<<" "<<i<<"->"<<j<<";";if(A[i][j]==INF){if(i!=j)cout<<"不存在路径"<<"\n"<<endl;}else{cout<<"路径长度为:"<<A[i][j]<<"\n";cout<<"路径为:"<<i<<"*";pre=path[i][j];while(pre!=-1){cout<<pre<<"\n";pre=path[pre][j];}cout<<j<<endl;}}}//以下为选择总体最优过程,然后确址;for(i=0;i<G->n;i++)for(j=0;j<G->n;j++){if(A[i][j]==INF)count[i]=0;elsecount[i]=1;}for(i=0;i<G->n;i++)if(count[i]){for(j=0;j<G->n;j++)if(i!=j)A[i][i]+=A[j][i];}k=0;for(i=0;i<G->n;i++){if(count[i])if(A[k][k]>A[i][i])k=i;}cout<<"超市的最佳地址为:"<<G->vexs[k]<<endl;}4.5主函数模块void main(){Mgraph *Gh=NULL;Gh=(Mgraph *)malloc(sizeof(Mgraph));CreatMgraph(Gh);Floyed(Gh);system("pause");}5 调试分析5.1本题目的关键点之一:有两个权值:各单位到超市的距离及各单位人去超市的频度。

这使得图的建立出现了困难,经过分析这两个值可以合并为一个权值即distance*frequency;这样就使得图的建立轻而易举。

5.2本题目的关键点之二:利用floyd算法求出每一对顶点之间的最短路径。

5.3本题目的关键点之三:选出最短路径,即最佳地点应使其到其他单位权值最小。

注意:每比较一次path应清0一次(Path=0)。

6 设计程序如下:#include <string.h>#include <stdio.h>#include <stdlib.h>#include <time.h>#include "malloc.h"#include <iostream.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;typedef struct{V extype vexs[MAXVEX][MAXVEX]; //单位名称(顶点信息);i nt adj[MAXVEX][MAXVEX]; //单位之间的相通情况(是否有边);i nt dis[MAXVEX][MAXVEX]; //单位间距离(边的长度);i nt f[MAXVEX]; //各单位去超市的频率;i nt n; //顶点数和边数;i nt e;}Mgraph;void CreatMgraph(Mgraph *G){i nt i,j,k;p rintf("请输入单位个数:\n");scanf("%d",&(G->n));p rintf("请输入单位间的路径数:\n");scanf("%d",&(G->e));p rintf("请输入单位名称:\n");f or(i=0;i<G->n;i++){printf("请输入第%d个单位名称:\n",i);scanf("%s",&G->vexs[i]);}f or(i=0;i<G->n;i++) //结构体的初始化;for(j=0;j<G->n;j++){G->adj[i][j]=0;G->dis[i][j]=0;G->f[i]=0;}f or(k=0;k<G->e;k++){printf("请输入相通的两单位 (输入格式:i,j):\n");scanf("%d,%d",&i,&j);//在距离上体现为无向;printf("请输入相同两个单位间的距离(格式:dis):\n");scanf("%d",&(G->dis[i][j]));G->adj[i][j]=1;G->adj[j][i]=1;G->dis[j][i]=G->dis[i][j];}f or(k=0;k<G->n;k++){printf("请输入第%d个单位去超市的相对频率:\n",k);scanf("%d",&(G->f[k]));}f or(i=0;i<G->n;i++) //以距离和频率之积作为权值;for(j=0;j<G->n;j++){G->dis[i][j]*=G->f[i]; //最终权值非完全无向;if(G->adj[i][j]==0&&i!=j)G->dis[i][j]=INF;}}void Floyed(Mgraph *G) //带权有向图求最短路径floyd算法{i nt A[MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];i nt i,j,k,pre;i nt count[MAXVEX];f or(i=0;i<G->n;i++) //初始化A[][]和path[][]数组for(j=0;j<G->n;j++) //置初值;A[i][j]=G->dis[i][j];path[i][j]=-1;count[i]=0;}f or(k=0;k<G->n;k++) //k代表运算步骤{for(i=0;i<G->n;i++)for(j=0;j<G->n;j++)if(A[i][j]>(A[i][k]+A[k][j])) //从i经j到k的一条路径更短{A[i][j]=A[i][k]+A[k][j];path[i][j]=k;}}c out<<endl<<"Floyed算法求解如下:"<<endl;f or(i=0;i<G->n;i++)for(j=0;j<G->n;j++){if(i!=j){cout<<" "<<i<<"->"<<j<<";";if(A[i][j]==INF){if(i!=j)cout<<"不存在路径"<<"\n"<<endl;}else{cout<<"路径长度为:"<<A[i][j]<<"\n";cout<<"路径为:"<<i<<"*";pre=path[i][j];while(pre!=-1){cout<<pre<<"\n";pre=path[pre][j];}cout<<j<<endl;}}}//以下为选择总体最优过程,然后确址;f or(i=0;i<G->n;i++)for(j=0;j<G->n;j++)if(A[i][j]==INF)count[i]=0;elsecount[i]=1;}f or(i=0;i<G->n;i++)if(count[i]){for(j=0;j<G->n;j++)if(i!=j)A[i][i]+=A[j][i];}k=0;f or(i=0;i<G->n;i++){if(count[i])if(A[k][k]>A[i][i])k=i;}c out<<"超市的最佳地址为:"<<G->vexs[k]<<endl; }void main(){M graph *Gh=NULL;G h=(Mgraph *)malloc(sizeof(Mgraph));C reatMgraph(Gh);F loyed(Gh);s ystem("pause");}/*测试数据:输入:单位个数4单位间的路径数6第0个单位名称A第1个单位名称B第2个单位名称C第3个单位名称D相通两单位之间的距离0,1 21,2 32,3 40,3 10,2 21,3 3第0个单位去超市的频率 2第1个单位去超市的频率 4第2个单位去超市的频率 3第3个单位去超市的频率 1 */7 测试结果7.1输入7.2输出参考文献:1、《C程序设计》第三版谭浩强著清华大学出版社2、《数据结构》(C语言版)严蔚敏著清华大学出版社3、《数据结构及应用》沈华等编著机械工业出版社总结终于完成了本次数据结构课程设计,对我来说这是一项不小的挑战,它不仅检验了我的学习情况,也考验了我的意志力,让我有了很大的收获!通过一学期的学习,我知道数据结构是一门纯属于设计的科目,它需用把理论变为上机调试。

相关文档
最新文档