没有合适的资源?快使用搜索试试~ 我知道了~
图的最短路径(算法与数据结构课程设计).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 197 浏览量
2023-03-13
20:57:51
上传
评论
收藏 523KB PDF 举报
温馨提示
试读
14页
。
资源推荐
资源详情
资源评论
图的最短路径
一、问题描述
最小生成树是一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中
的所有个结点,并且有保持图连通的最小的边,最小生成树在实际问题中具有一定的应用价
值,如在城市之间建设网络,要保证网络的连通性,求最经济的设计方法。求解最小生成树
时,可以采用普里母算法和克鲁斯卡尔算法。
二、基本要求
1、 选择合适的储存结构,完成网的建立;
2、 利用普里母算法求网的最少生成树,并输出结果;
3、 利用克鲁斯卡尔求网的最少生成树,并输出结果;
4、 采用邻接矩阵和邻接表两种储存结构;
三、测试数据
对右图进行测试
右图是 6 个顶点的 10 个边的连通图
六个顶点分别是
v1 v2 v3 v4 v5 v6
边和边上的权植分别是
v1 v2 6
v1 v3 1
v1 v4 5
v2 v3 5
v2 v5 3
v3 v4 5
v3 v5 6
v3 v6 4
v4 v6 2
v5 v6 6
wilyes11 收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802
四、算法思想
克鲁斯卡尔算法思想是:假设连通图 N=(V,{E}),则令最小生成树的初始状态为只
有 n 个顶点而无边的非连通图 T=(V,{ }),图中每个顶点自成一个连通分量。在 E 中选
择代价最小的边,若该边依附的顶点落在 T 中不同的连通分量上,则将此边加入到 T 中,否
则舍去此边而选择下一条代价最小的边。以此类推,直至 T 中所有顶点都在同一连通分量上
为止。
普里母算法思想是:假设 N=(V,{E})是连通图,TE是N上最小生成树中边的
集合。算法从U={u0}(u0∈V),TE={ }开始,重复执行下述操作:在所有 u∈U,v∈V
—U 的边(u,v)∈E 中找一条代价最小的边(u0,v0)并入集合 TE,同时 v0 并入 U,直至
U=V 为止。此时 TE 中必有n-1条边,则T=(V,{TE})为N的最小生成树。为实
现这个算法需附设辅助数组 closedge,以记录从 U 到 V-U 具有最小代价的边。对每个顶点 vi
∈V-U,在辅助数组中存在一个相应分量 closedge[i-1],它包括两个域,其中 lowcost 储
存该边的权。显然,closedge[i-1].lowcost=Min{cost(u,vi)|u∈U},vex∈U}, vex 域存储
该边依附的在 U 中的顶点 。
五、模块
克鲁斯卡尔算法和普里母算法都要用到以下的算法
int LocateVex(Mgraph G,Vertex u),矩阵求点 u 所在位置;
void CreateGraph(Mgraph/ ALGraph &G),建立带权邻接矩阵/邻接表的结构;
void kruskal2(ALGraph G),邻接链表的克鲁斯卡尔算法;
void kruskal(MGraph G),邻接矩阵的克鲁斯卡尔算法;
int minimum(ALGraph/ MGraph G,struct arry wq[]),邻接表/邻接矩阵求最小的权值;
void MiniSpanTree_PRIM1(ALGraph G,VertexType u),邻接表的普里姆算法;
void MiniSpanTree_PRIM2(MGraph G,VertexType u),邻接矩阵的普里姆算法。
六、数据结构//(ADT)
1、邻接表的储存结构如下
邻接表的结点结构信息
typedef struct ArcNode{/*定义边结点*/
int adjvex;/*该弧指向的顶点的位置*/
int weight;/*该弧的权重*/
struct ArcNode *nextarc;/*指向下一条弧的指针*/
}ArcNode;
邻接表的表头向量的结点结构信息
typedef struct VNode{
VertexType data; /*顶点信息*/
wilyes11 收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802
ArcNode *firstarc;/*指向第一条依附该顶点的弧的指针*/
}VNode,AdjList[MAX_VERTEX_NUM];//定义图结点
邻接表的表头带权图的结构信息
typedef struct{
AdjList vertices;/*表头向量*/
int vexnum,arcnum;//顶点数和弧数
}ALGraph;//定义图
2、邻接矩阵的储存结构如下
typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];/*邻接距阵*/
邻接矩阵带权图的结构信息
struct MGraph
{ Vertex vexs[MAX_VERTEX_NUM];/*顶点向量*/
AdjMatrix arcs;/*邻接矩阵*/
int vexnum,arcnum;/*顶点数和弧数*/
};
七、源程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 5 /*顶点值最大字符数*/
#define MAX_VERTEX_NUM 20 /*最大顶点数*/
typedef char Vertex[MAX_NAME];/*(邻接矩阵用)顶点名字串*/
typedef char VertexType[MAX_NAME];/*(邻接链表用)顶点名字串*/
typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];/*邻接距阵*/
/*链表的结点结构信息*/
typedef struct ArcNode{/*定义边结点*/
int adjvex;/*该弧指向的顶点的位置*/
int weight;/*该弧的权重*/
struct ArcNode *nextarc;/*指向下一条弧的指针*/
}ArcNode;
/*表头向量的结点结构信息*/
typedef struct VNode{
VertexType data;/*顶点信息*/
ArcNode *firstarc;/*指向第一条依附该顶点的弧的指针*/
}VNode,AdjList[MAX_VERTEX_NUM];//定义图结点
wilyes11 收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802
剩余13页未读,继续阅读
资源评论
คิดถึง643
- 粉丝: 3909
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 美赛数学建模算法-使用Matlab实现非线性规划NonLinearProgramming-国赛-题解.zip
- linux安装java8环境资源包
- 静态路由综合实验模拟ensp
- Unity中WebSocket网络连接的代码以及相关protobuf-net协议转换后的脚本类
- 基于ATLAB + Psychtoolbox 心理学实验,情绪词汇效价判断
- 美赛数学建模算法-使用Matlab实现神经网络NeuralNetwork-包括BP+LVQ-国赛-题解.zip
- hb-mapper-makertbin.log
- dfcf_silence_upgrade_cfw_10.15.3_20240318163518_64.apk
- 美赛数学建模算法-使用Matlab实现多元分析MultivariteAnalysis-包括聚类分析+主成分分析-国赛-题解
- 构成学1.psd
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功