dijkstra伪代码翻译java,Dijkstra算法的伪代码和C语言版本,还是模版

本文解析了Dijkstra算法的详细步骤,通过伪代码形式展示如何从源点(startp)寻找目标点(endp)之间的最短路径,并处理边的松弛过程,确保在有限图中找到最短路径。特别注意了边界条件和溢出问题的处理。
摘要由CSDN通过智能技术生成

伪代码:

//  初始化,设从0开始

for i=[0,n)

dist[i] = map[0][i]

visit[0] = true;

for i=[1,n)

//  寻找最短路径(s,t),同时把t加入S集合

min = MAX_VALUE

for j=[0,n)

if !visit[j] && dist[j]

min = dist[j]//记录最小值和最小值的下标

min_j = j

visit[j] = true

//  松弛边(t,v),其中v为顶点

for k=[0,n)

if !visit[k] && dist[k]>dist[j]+tab[j][k]

dist[k] = dist[j]+tab[j][k]

#include

#define INFINITY 0x7f7f7f7f //顶点之间不可达时,map[][]初始化为该值

#define MAXNUM 100

int map[MAXNUM][MAXNUM];//这三个数组看名字都懂的

int visited[MAXNUM];

int dist[MAXNUM];

int n,e,startp,endp;//e-边数,n-顶点数,startp-源点,endp-目标点

int dijkstra(){

int i,j,k,min,min_i;

int res = 0;

for(i = 0;i < n;i++){

dist[i] = map[startp][i];

visited[i] = 0;

}

visited[startp] = 1;

for(i = 1;i < n;i++){

min = INFINITY;

for(j = 0;j < n;j++){

if(!visited[j] && dist[j] < min){

min = dist[j];

min_i = j;

}

}

visited[min_i] = 1;

for(k = 0;k < n;k++){

if(!visited[k] && (dist[k] > (dist[min_i] + map[min_i][k])))

dist[k] = dist[min_i] + map[min_i][k];

}

}

return dist[endp];

}

注意:表示边不可达的值不能太大,整型为32的机器绝不能设置为0x7FFFFFFF,因为计算dist[k]>dist[j]+tab[j][k]时会溢出导致结果出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值