数据结构-实验五-图

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

数据结构与算法课程实验报告实验五:图的相关算法应用

姓名:cll

班级:

学号:

【程序运行效果】

一、实验内容:

求有向网络中任意两点之间的最短路

实验目的:

掌握图和网络的定义,掌握图的邻接矩阵、邻接表和十字链表等存储表示。掌握图的深度和广度遍历算法,掌握求网络的最短路的标号法和floyd算法。

二、问题描述:

对于下面一张若干个城市以及城市间距离的地图,从地图中所有可能的路径中求出任意两个城市间的最短距离及路径,给出任意两个城市间的最短距离值及途径的各个城市。

三、问题的实现:

3.1数据类型的定义

#define MAXVEX 50 //最大的顶点个数

#define MAX 100000

typedef struct{

char name[5]; //城市的名称

}DataType; //数据结构类型

typedef struct{

int arcs[MAXVEX][MAXVEX]; //临接矩阵

DataType data[MAXVEX]; //顶点信息

int vexs; //顶点数

}MGraph,*AdjMetrix; //邻接矩阵表示图

3.2主要的实现思路:

用邻接矩阵的方法表示各城市直接路线的图,之后用Floyd算法求解两点直接的最短距离,并用递归的方法求出途经的城市。

主要源程序代码:

#include

#include

#define MAXVEX 50

#define MAX 100000

typedef struct{

char name[5]; //城市的名称

}DataType; //数据结构类型

typedef struct{

int arcs[MAXVEX][MAXVEX]; //临接矩阵

DataType data[MAXVEX]; //顶点信息

int vexs; //顶点数

}MGraph,*AdjMetrix;

//创建临接矩阵

void CreatGraph(AdjMetrix g,int m[][MAXVEX],DataType d[],int n){

/*g表示邻接矩阵,m[][MAXVEX]表示输入的邻接矩阵,d[]表示各城市的名称,n表示城市数目*/

int i,j;

g->vexs = n;

for(i=0;i < g->vexs;i++){

g->data[i] = d[i];

for(j=0;jvexs;j++){

g->arcs[i][j] = m[i][j];

}

}

}

//求最短路径

void Floyd(AdjMetrix g,int F[][10],int path[][10]){

int i,j,k;

for(i=0;ivexs;i++){

for(j=0;jvexs;j++){

F[i][j] = g->arcs[i][j]; //初始化最短路径

path[i][j] = -1; //初始化路径为-1

}

}

//递推过程

for(k=0;kvexs;k++){

for(i=0;ivexs;i++){

for(j=0;jvexs;j++){

if(F[i][j] > F[i][k]+F[k][j]){

F[i][j] = F[i][k] + F[k][j]; //更新最短距离的大小

path[i][j]=k;//保存两点之间最短路径经过的点

}

}

}

}

}

//递归实现最短路径途经的各个城市打印

void out(int a,int b,int path[][10],AdjMetrix g){

/*a表示起点城市,b表示终点城市,g表示邻接矩阵*/

if(path[a][b] == -1){

return; //说明该两点直接无途经的城市

}

out(a,path[a][b],path,g);

printf("%s->",g->data[path[a][b]].name);

out(path[a][b],b,path,g);

}

//主函数

void main(){

MGraph gg;

AdjMetrix g = ≫

DataType d[10] ={{0,"郑州"},{1,"北京"},{2,"天津"},{3,"南昌"},{4,"上海"},{5,"贵阳"},{6,"株洲"},{7,"广州"},{8,"兰州"},{9,"西宁"}};

int m[][MAXVEX] = {

{0,45,35,50,MAX,MAX,40,MAX,MAX,MAX},

{45,0,20,MAX,MAX,90,MAX,MAX,70,MAX},

{35,20,0,MAX,50,MAX,MAX,MAX,MAX,MAX},

{50,MAX,MAX,0,50,MAX,40,MAX,MAX,MAX},

{MAX,MAX,50,50,0,MAX,MAX,MAX,MAX,MAX},

{MAX,50,MAX,MAX,MAX,0,20,50,50,MAX},

{40,MAX,MAX,40,MAX,20,0,MAX,MAX,MAX},

{MAX,MAX,MAX,MAX,MAX,MAX,50,0,MAX,MAX},

{MAX,70,MAX,MAX,MAX,50,MAX,MAX,0,35},

{MAX,MAX,MAX,MAX,MAX,MAX,MAX,MAX,35,0},

};

相关文档
最新文档