最短路径_数据结构课程设计报告_数据结构课程设计报告

2020-02-27 其他范文 下载本文

最短路径_数据结构课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构课程设计报告”。

数据结构课程设计

《数据结构》课程设计报告

设计题目:____医院选址____________ 姓名:__________________ 学号:________________ 专业:___________

院系:____________

班级:_________________ 指导教师:_________________

年 1月 3 日

数据结构课程设计

一、问题描述

(1)题目内容:有n个村庄,现要从这n个村庄中选择一个村庄新建一所医院,使其余的村庄到这所医院的距离总和来说较短。(n>=5)(2)基本要求:

(3)可以输出每一对点间的路径长度;然后选取偏心度,最小的偏心度即为所求。

二、需求分析

(4)本程序的功能包括找出每一对点间的路径长度。(5)然后算出每一对点的偏心度。(6)其中最小的偏心度即为所求。

三、概要设计

操作集合:

(7)public:MGraph(DataType a[],int b[][MaxSize],int n,int e);//初始化邻接矩阵和路径

(8)void Floyd();//弗洛伊德算法的实现(9)void getE();//获取偏心度

(10)void showdist();//把每一对顶点之间的路径权值show出来(11)~MGraph(){} //类的析构函数

四、数据结构设计

(1)DataType vertex[MaxSize];//存放图中顶点的数组(2)int

arc[MaxSize][MaxSize];//存放图中边的数组

(3)string path[MaxSize][MaxSize];//存放从Vi到Vj的最短路径,初始为

//path[i][j]=“ViVj”

(4)int dist[MaxSize][MaxSize];//存放求得的最短路径长度(5)int vertexNum, arcNum;//图的顶点数和边数(6)int E[MaxSize][2];//获取最小偏心度和该顶点

五、算法设计

1.算法分析

1)对带权有向图的,调用Floyd算法,对每一对顶点间的最短路径长度的矩阵;

2)对最短路径长度矩阵的每列求最大值,即得到各点的偏心度; 3)具有最小偏心度的顶点即为所求。

数据结构课程设计

数据结构课程设计

2.算法实现

#include #include #include using namespace std;

const int MaxSize = 5;template cla MGraph { public:,建立具有n个顶点e条边的图

};template MGraph::MGraph(DataType a[], int b[][MaxSize],int n,int e){

} template void MGraph::Floyd(){ int i,j,k;

MGraph(DataType a[], int b[][MaxSize],int n,int e);//构造函数

void Floyd();void getE();void showdist();~MGraph(){} DataType vertex[MaxSize];int arc[MaxSize][MaxSize];int dist[MaxSize][MaxSize];int vertexNum, arcNum;int E[MaxSize][2];

//存放图中顶点的数组 //存放图中边的数组 //存放求得的最短路径长度 //图的顶点数和边数 private:

string path[MaxSize][MaxSize];//存放从Vi到Vj的最短路径,初始为path[i][j]=“ViVj” vertexNum = n;arcNum = e;for(int i=0;i

} arc[i][j]=b[i][j];dist[i][j]=arc[i][j];

//直接放入邻接矩阵

for(int j=0;j

数据结构课程设计

} for(i=0;i

} for(k=0;k

for(i=0;i

}

//顶点i和j之间是否经过顶点k for(j=0;j

} dist[i][j]=dist[i][k]+dist[k][j];path[i][j]=path[i][k]+path[k][j];for(j=0;j

} dist[i][j]=arc[i][j];if(dist[i][j]!=10000)else path[i][j]=“”;path[i][j]=vertex[i]+vertex[j];

template void MGraph::showdist(){

} template void MGraph::getE(){

心度。

} for(int i=0;i

}

for(int i=0;i

} for(int j=0;j

“;for(int i=0;i

E[i][0]=i;//存放某一个节点的序号 E[i][1]=0;//存放节点的最短路径,权值。

int max = dist[0][i];//i表示列;j表示行。for(int j=0;j

if(dist[j][i]>max){ } E[i][1]=max;max = dist[j][i];

数据结构课程设计

cout

} void main(){

代表是无穷。

}

MGraph GM(a,b,5,7);GM.Floyd();GM.showdist();cout

0,1,10000,10000,10000, 10000,0,2,10000,10000, 10000,10000,0,2,4, 10000,1,3,0,10000, 10000,10000,10000,5,0,};char a[5] = {'A','B','C','D','E'};int b[5][5] = {

//邻接矩阵,A,B,C,D,E是节点的信息,代表某一个地点。

//存储某两个有向节点间的权值,代表路径长度,10000 int min=E[0][1],k;for(int i=0;i

} cout

cout

if(E[i][1]

} min=E[i][1];k=i;

六、程序测试与实现

1、函数之间的调用关系

Main

Floyd()

showdist()

getE()

2、主程序

void main(){ char a[5] = {'A','B','C','D','E'};

//邻接矩阵,A,B...是节点的信息,代表某一个地点。

数据结构课程设计

int b[5][5] = { //存储某两个有向节点间的权值,代表路径长度,10000代表是无穷。

0,1,10000,10000,10000, 10000,0,2,10000,10000, 10000,10000,0,2,4, 10000,1,3,0,10000, 10000,10000,10000,5,0,};

MGraph GM(a,b,5,7);

}

GM.Floyd();

GM.showdist();

cout

GM.getE();

3、测试数据

int b[5][5] = { //存储某两个有向节点间的权值,代表路径长度,10000代表是无穷。

0,1,10000,10000,10000, 10000,0,2,10000,10000, 10000,10000,0,2,4, 10000,1,3,0,10000, 10000,10000,10000,5,0,};

4、测试结果

七、调试分析

数据结构课程设计

1.在算偏心度的时候;每一列的最大值算错了,下次要注意。

在show的时候也把行和列搞反了;所以以为结果不对其是对的。2.算法的时空分析:(1)时间复杂度:O(n^3);(2)空间复杂度:O(n^2)[1]

八、遇到的问题及解决办法

1)在算偏心度的时候;每一列的最大值算错了,下次要注意。

解决办法:是把行变,列不变。

2)在show的时候也把行和列搞反了;所以以为结果不对其是对的。

解决办法:把行和列反一下就好。

九、心得体会

Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B。所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查Dis(AX)+ Dis(XB)

《最短路径_数据结构课程设计报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
最短路径_数据结构课程设计报告
点击下载文档
相关专题 数据结构课程设计报告 报告 数据结构 最短 数据结构课程设计报告 报告 数据结构 最短
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文