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 ...
随机推荐
- 用LinkedList
>用LinkedList模拟栈集合MyStack >MyStack测试类 用LinkedList模拟栈集合MyStack import java.util.LinkedList; ...
- 如何使用EditPlus批量删除 带有某个字符的一行
比如以下五行,我要将带有英文字母a的一行全部批量删除1234551243243123aa244123123981232137aa 2013-04-11 19:32 提问者采纳 我这里是英文版, ...
- 安装composer出现链接补上的问题
下载 Composer-Setup.exe 后安装出错: Composer Download Error Connection Error [ERR_CONNECTION]: Unable to co ...
- 陈远波(java)--Git 入门
本章节讲解思路:1.在Git hup官网注册一个Git账号:2.下载git bash管理工具 3.在git bash上绑定GitHup账号密码: 一:进入GitHup官网:https://githu ...
- vue2.0模拟锚点
在vue项目中,因为采用路由跳转,会导致无法使用常规的a标签配合ID的锚点功能. 解决办法: <a href="javascript:void(0)" @click=&quo ...
- Actor模型---SwiftActors
actor是一个无线程区别的内存访问对象:actor背后有线程支持:actor的事件处理依赖与这个线程(队列.池). actor是一种面向对象的线程(池)模型,强调对事件的响应:在iOS中相当于一种通 ...
- Android-硬件加速
转载请注明来源:http://blog.csdn.net/goldenfish1919/article/details/36890475 从3.0(API level 11)開始.Android 2D ...
- 【转】Android中通知的提示音、震动和LED灯效果小例子
通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...
- 如何用IDEA http://localhost:8080/不带上项目名访问
IDEA TOMCAT设置中把这里的项目名去掉即可
- MetaMask/provider-engine-1
https://github.com/MetaMask/provider-engine 在学习这个之前应该先看一下什么是zero-client,MetaMask/zero-client Web3 Pr ...