《数据结构》课程设计。
报告。题目: 学校超市选址问题
班级: 09210105
姓名: 周景景
学号: 0921010509
指导教师: 尹四清,薛海丽
日期:2010-12-27~2011-1-7
软件工程。1、需求分析。
核心问题: 求最短路径(选址的要求就是超市到各单位权值之和最少)
数据模型(逻辑结构): 带权有向图 (权值计算: 距离*频度)
存储结构: 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、算法设计思想。
floyd算法利用动态规划思想,通过把问题分解为子问题来解决任意两点见的最短路径问题。设g=(v, e, w)是一个带权有向图,其边v=。对于k≤n,考虑其结点v的一个子集。
对于v中任何两个结点vi、vj,考虑从vi到vj的中间结点都在vk中的所有路径,设是其中最短的,并设的路径长度为。如果结点vk不在从vi到vj的最短路径上,则;反之则可以把分为两段,其中一段从vi到vk,另一段从vk到vj,这样便得到表达式。上述讨论可以归纳为如下递归式:
原问题转化为对每个i和j求,或者说求矩阵。
利用上述递归表达式,串行floyd算法可以写成下面的样子:
a)初始化:d[u,v]=a[u,v]
b) for k:=1 to n
for i:=1 to n
for j:=1 to n
if d[i,j]>d[i,k]+d[k,j]
then d[i,j]:=d[i,k]+d[k,j];
c) 算法结束:d即为所有点对的最短路径矩阵。
算法包括三个循环,每个循环需要运行步骤n,最内部的循环体可以在常数时间内完成,因此算法的复杂度为:o(n^3)。
3、流程图。
4、课程设计过程中的关键算法。
floyd算法表述:
第一步,让所有路径加上中间顶点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的最短路径长度。
**表示如下:
void floyed(mgraph *g带权有向图求最短路径floyd算法。
int a[maxvex][maxvex],path[maxvex][maxvex];
int i,j,k,pre;
int count[maxvex];
for(i=0;in;i初始化a[和path[数组。
for(j=0;jn;j置初值;
for(k=0;kn;kk代表运算步骤。
cout< for(i=0;in;i++)
for(j=0;jn;j++)
//以下为选择总体最优过程,然后确址;
for(i=0;in;i++)
for(j=0;jn;j++)
for(i=0;in;i++)
if(count[i])
for(i=0;in;i++)
cout<<"超市的最佳地址为:" 5、测试及结果。 测试数据:输入:单位个数、单位间的路径数、单位名称、相通两单位以及之间的距离、和各单位去超市的频率。 输出:相通两单位之间的路径和他的长度。 结果:6、课程总结。 这次的程序软件基本上运行成功,可以简单的对已经输入的数据进行计算,求出超市的最佳选址单位。但是程序较小,功能不全面,只是理论,并未实践。 同时,这次数据结构课程设计让我们感触很深,使我们每个人都了解到的学习不应该只局限于我们的课本,因为课本上告诉我们的只是很有限的一部分,所涉及的面也是狭窄的。但是怎样在有限的范围内学习到无限的知识呢?那就要我们自己懂得竞争,懂得自学,懂得充分利用身边的任何资源。 应该说,我们在这次的课程设计中学到了很多知识,这并不仅仅包括书本上的知识,更重要的是我们学会了如何去和别人交流,怎样用语言去实现自己的想法,在这个过程中使我懂得了勤学好问的重要性。 虽然在我的程序中有一部分是从网上搜索得来的,但我竭力将所获得的信息变成自己的资源。在我动手上机操作的同时,我在了解和看懂的基础上有所改变和创新,但是在我的程序软件中还有部分的不足,需要加以更新。同时,通过这次课程设计,我们都意识到了自己动手实践的弱势,特别是在编程方面,于是我们知道了计算机的实践操作是很重要的,只有通过上机编程才能充分的了解自己的不足。 洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每... 课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动... 学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...课程设计报告格式 课程设计
课程设计总结,课程设计报告
课程设计 课程设计报告格式