dijkstra算法计算最短路径和并输出最短路径
void dijisitela(int d, int m1)
{
int dis[], book[], path[], u, v, min;
l = ;
for (i = ; i < n1; i++)
{
dis[i] = w[d][i];
book[i] = ;
path[i] = -;
midpath[][i] = -;
}
midsum[] = ;
book[] = d; //Dijkstra算法核心语句
for (i = ; i < n1 - ; i++)
{
//找到离d号顶点最近的顶点
min = fmax;
for (j = ; j < n1; j++)
{
if (book[j] == && dis[j] < min)
{
min = dis[j];
u = j;
}
}
book[u] = ;
for (v = ; v < n1; v++)
{
if (w[u][v] < fmax)
{
if (dis[v] > dis[u] + w[u][v])
{
dis[v] = dis[u] + w[u][v];
path[v] = u;
}
}
}
}
for (i = ; i < n1; i++)
if (w[d][i] < fmax) path[i] = -;
stack <int> q;//由于记录的中途节点是倒序的,所以使用栈(先进后出),获得正序
j = m1;
while (path[j] != -) //如果j有中途节点
{
q.push(j); //将j压入堆
j = path[j]; //将j的前个中途节点赋给j
}
q.push(j);
midpath[][] = d;
while (!q.empty()) //先进后出,获得正序
{
midpath[][l++] = q.top();
q.pop(); //将堆的头节点弹出
}
for (i = ; i < n1; i++)
if (midpath[][i] != -)
{
midsum[] += w[midpath[][i - ]][midpath[][i]];
}
}
如代码所示,边的权值存储在w[i][j]里,源节点为d,终节点为m1,运用典型的dijkstra算法得出最短路径和,并用“”最后一跳“”方法得出最短路径的经过节点值,关于最后一跳算法必定能得到最短路径经过的证明方法为:
最后一跳与终结点必定是直接相连的,也就是加上一个固定的w[][]值,那么就必须要求最后一跳这个点也达到“”“最短路径”“”,因此可以得证。
dijkstra算法计算最短路径和并输出最短路径的更多相关文章
- Dijkstra 算法——计算有权最短路径(边有权值)
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现: 0.2)最短路径算法的基础知识,参见 http://blog. ...
- Dijkstra算法——计算一个点到其他所有点的最短路径的算法
迪杰斯特拉算法百度百科定义:传送门 gh大佬博客:传送门 迪杰斯特拉算法用来计算一个点到其他所有点的最短路径,是一种时间复杂度相对比较优秀的算法 O(n2)(相对于Floyd算法来说) 是一种单源最短 ...
- 图之单源Dijkstra算法、带负权值最短路径算法
1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable< ...
- Dijkstra算法依据项目改进版,输出路径
package dijkstra; import java.util.ArrayList; public class Dijkstra { ; /*private static int[][] Gra ...
- 求两点之间最短路径-Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...
- 最短路径—Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
- 最短路径——Dijkstra算法
一.相关定义 最短路径:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径. 地位:Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据 ...
- python数据结构与算法——图的最短路径(Dijkstra算法)
# Dijkstra算法——通过边实现松弛 # 指定一个点到其他各顶点的路径——单源最短路径 # 初始化图参数 G = {1:{1:0, 2:1, 3:12}, 2:{2:0, 3:9, 4:3}, ...
- Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32824 Accepted: 11098 Description Bes ...
随机推荐
- 【转】学习Linux守护进程详细笔记
[原文]https://www.toutiao.com/i6566814959966093837/ Linux守护进程 一. 守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的 ...
- vcenter server appliance(vcsa) 配置IP的方法
方法一: vcenter server appliance 5.1 及以后版本包括5.5,在安装完毕后,console界面是没有网络配置项的,如果需要进行IP配置,可以login后,输入命令yast( ...
- 开通博客啦 Let‘s Go!
入园两年半,在博客园学到很多知识.得到了很大帮助,今天终于开通博客啦,准备将自己所学到的有用知识分享给大家,共同学习共同进步.
- XtraEditors五、SpinEdit、TimeEdit
SpinEdit控件 此按钮控件是用来增加或减少在编辑的文本编辑区显示的数值, 该编辑值可以是一个整数或浮点数. 其 Text属性 用于设置编辑区的文本: 其 Value属性 用于获取编辑区的值: 示 ...
- PyQt5--MessageBox
# -*- coding:utf-8 -*- ''' Created on Sep 13, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...
- css实现常用的两栏三栏布局
1.两栏 <div class="wrapper"> <div class="half left">left box <p> ...
- python第三十一课--递归(1.简单递归函数的定义和使用)
演示:简单递归函数的定义和使用 需求:1~5进行累加 找寻关系:函数名:mySum(num) 1).找临界点:运算到1(加到1)就结束了 2). 第一次:5+mySum(5-1)-->retur ...
- oracle 批量更新merge语句
merge into (SELECT * FROM QUERY_DB1.test_MPOS ) T1 using (SELECT FLAG FLAG1,IN_MNO FROM QUERY_DB1.t ...
- scrt中使用alt键
session Options-->Terminal---->Emulation------>Emacs----->Use ALT as meta key
- UML类图简单学习 各种对象、关系UML表示法
<大话设计模式>上面的UML类图: 类的UML表示 动物 的矩形框 表示是一个类. 类图分为三层,第一层显示类的名称,如果是抽象类,则用斜体表示:第二层是类的特性,通常就是类的字段和属性: ...