22 Dijkstra 算法(严 7.42)

本文介绍了如何使用C语言实现Dijkstra算法,以邻接表存储结构求解从源点到所有顶点的最短路径。提供详细步骤解析及样例输入输出,包括顶点数、边数、权值的处理,并展示算法思路和代码实现。
摘要由CSDN通过智能技术生成

题目

description
编写程序,实现以邻接表作存储结构,求从源点到其余各顶点的最短路径的 Dijkstra算法。
input
第一行输入顶点数 n 和边数 m;第二行输入顶点信息;分 m 行输入 m 对顶点 vi,vj(表示由顶点 vi 到顶点 vj(i 不等于 j)的边)以及该弧的权值。
output
输出从源点到其余各顶点的最短路径(不可达用-1 表示)。
sample_input
6 11
1 2 50
1 3 10
1 5 45
2 3 15
2 5 10
3 1 20
3 4 15
4 2 20
4 5 35
5 4 30
6 4 3
sample_output
1 3 10
1 4 25
1 2 45
1 5 45
1 6 -1

思路

  1. 以邻接表作存储结构
/*边表*/
typedef struct ArcNode {
   
	int adjvex; //该弧指向顶点的位置
	int weight;//权值
	struct ArcNode *nextarc; //指向下一条弧的指针
} ArcNode;

/*顶点表*/
typedef struct VertexNode {
   
	int data; //顶点数据
	ArcNode *firstarc; //指向该顶点第一条弧的指针
} VertexNode;

/*基于邻接表的图*/
typedef struct AdjList {
   
	VertexNode vertex[MAX];
	int vexnum, arcnum; //图的顶点数和弧数
} AdjList;

void createAdjList(AdjList *L, int n, int m) {
   
	int i, j;
	L->vexnum = n;
	L->arcnum = m;
	for (i = 0; i < n; i++) {
    //输入顶点信息,初始化顶点表
		L->vertex[i].data = i + 1; //1-6
		L->vertex[i].firstarc = NULL;
	}
	int a, b, c; //a记录源点,b记录目标点,c记录权值
	for (j = 0; j < m; j++) {
    //输入边的信息,存储在边表中
		cin >> a >> b >> c;
		ArcNode *N = (ArcNode *)malloc(sizeof(ArcNode));
		N->adjvex = b;
		N->weight = c;
		N->nextarc = L->vertex[a - 1].firstarc; //头插法
		L-></
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值