课程设计报告

发布 2022-10-01 05:15:28 阅读 9105

《数据结构》课程设计。

报告。题目: 学校超市选址问题

班级: 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语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...