dijkstra算法--求两点之的最短路径

本文介绍了Dijkstra算法,用于求解图中两点间的最短路径。首先通过邻接矩阵建立图,然后详细阐述了Dijkstra算法的步骤,并提供了一个C语言实现的示例代码,演示如何找出从指定源点开始的最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# include <stdio.h>

# define MAX 20

int creat_cost(int cost[][MAX])		//cost 用来表示图的邻接矩阵 
{
	int arcnum,vexnum,v1,v2,w;
	printf ("请输入顶点个数和弧数\n");		//输入图的顶点数和弧数 
	scanf ("%d %d",&vexnum,&arcnum);
	for (int i=1; i<=vexnum; ++i)
	{
		for (int j=1; j<=vexnum; ++j)
		{
			cost[i][j] = 9999;		//假设9999为无限大 
		}
	}
	for (int k=1; k<=arcnum; ++k)
	{
		printf ("请输入两个顶点以及之间的距离\n") 
		printf ("v1,v2,w = ");			//输入所有边的一对顶点v1,v2,以及弧长 
		scanf (" %d %d %d",&v1,&v2,&w);		//并且根据输入数据建立邻接矩阵 
		cost[v1][v2] = w;
	}
	
	return vexnum;
}

void dijkstra(int cost[][MAX],int vexnum)		//dijkstra算法 求最短路径 
{
	int path[MAX],s[MAX],dist[MAX],i,j,n,w,v,sum,min,v1;/*	s数组记录顶点v是否已经确定了最短路径
															s[v]=1, 顶点v已经确定了最短路径
															s[v]=0,顶点v还没有确定最短路径
															dist数组表示当前求出的从v1到v2的最短路径
															path是路径数组,path[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值