数据结构-实验五-图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;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;i
for(j=0;j
F[i][j] = g->arcs[i][j]; //初始化最短路径
path[i][j] = -1; //初始化路径为-1
}
}
//递推过程
for(k=0;k
for(i=0;i
for(j=0;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},
};