dijkstra求最短路径长度

dijkstra求最短路并记录路径

#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
const int N=;
const int INF=0x3f3f3f3f;
int p[N][N],d[N],path[N]; ///path数组用于记录路径 void dijkstra(int sec,int n) ///sec为出发节点,n表示图中节点总数
{
int i,j,min,min_num;
int vis[N]={,};
for(i=;i<n;i++)
{
d[i]=p[sec][i];
}
vis[sec]=;d[sec]=;
for(i=;i<n;i++)
{
min=INF;
for(j=;j<n;j++)
{
if(!vis[j]&&d[j]<min)
{
min=d[j];
min_num=j;
}
}
vis[min_num]=;
for(j=;j<n;j++)
{
if(!vis[j]&&d[j]>min+p[min_num][j])
{
path[j]=min_num;
///path[j]记录d[j]暂时最短路径的最后一个中途节点min_num,
///表明d[j]最后一段从节点min_num到节点j
d[j]=min+p[min_num][j];
}
}
}
}
void print(int sec,int n) ///sec为出发节点,n表示图中节点总数
{
int i,j;
stack<int> q; ///由于记录的中途节点是倒序的,所以使用栈(先进后出),获得正序
for(i=;i<n;i++) ///打印从出发节点到各节点的最短距离和经过的路径
{
j=i;
while(path[j]!=-) ///如果j有中途节点
{
q.push(j); ///将j压入堆
j=path[j]; ///将j的前个中途节点赋给j
}
q.push(j);
printf("%d=>%d, length:%d, path: %d ",sec,i,d[i],sec);
while(!q.empty()) ///先进后出,获得正序
{
printf("%d ",q.top());///打印堆的头节点
q.pop(); ///将堆的头节点弹出
}
printf("\n");
}
}
int main()
{
memset(path,-,sizeof(path));///将path数组初始化为-1
int i,j,n=;
for(i=;i<n;i++)
{
for(j=;j<n;j++)
{
p[i][j]=(i==j?:INF);
}
}
///p[0][1]=10;p[0][3]=30;p[1][2]=50;p[1][4]=100;p[2][4]=5;p[3][2]=20;p[3][4]=60;p[4][5]=10;//p[i][j]表示节点i到节点j的距离
/*p[0][1]=10;p[1][0]=10;p[1][2]=1;p[2][1]=1;
p[2][4]=4;p[4][2]=4;p[0][3]=2;p[3][0]=2;p[3][2]=1;p[2][3]=1;
p[3][4]=7;p[4][3]=7;*/
p[][]=;p[][]=;
p[][]=;p[][]=;
p[][]=;p[][]=;
p[][]=;p[][]=;p[][]=;p[][]=;
dijkstra(,n); ///求从节点0出发到各节点的最短距离
print(,n); ///打印从节点0出发到各节点的最短距离和路径
return ;
}

floyd求最短路径长度

最短路径算法 SP的更多相关文章

  1. 加权图的最小生成树、最短路径算法 - java实现

    加权图相关算法 前言 本文主要介绍加权图算法中两个重要应用:最小生成树和最短路径. 求最小生成树时针对的是加权无向图,加权有向图的最小生成树算法成为"最小属树形图"问题,较为复杂, ...

  2. Johnson 全源最短路径算法

    解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...

  3. Floyd-Warshall 全源最短路径算法

    Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...

  4. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  5. Bellman-Ford 单源最短路径算法

    Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...

  6. 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)

    几个最短路径算法的比较:Floyd 求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3).       Floyd-Warshall算法(Floyd ...

  7. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  8. 无向图的最短路径算法JAVA实现

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  9. 最短路径算法之Dijkstra算法(java实现)

    前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知 ...

随机推荐

  1. 如何从海量IP中提取访问最多的10个IP

    算法思想:分而治之+Hash 1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理: 2.可以考虑采用分而治之的思想,按照IP地址的Hash(IP) % 1024的值,把海量IP日 ...

  2. Qt 飞机仪表显示

    使用Qt简单谢了一个飞机的一小部分仪表,还没有写完,目前只写了一个界面,不过思想应该是一样的. 效果图如下 其中主要由转速表,和下面的部分数字显示构成 转速表代码 .h文件 #ifndef CONTR ...

  3. django中判断当前user具有是否有对模块的增删改查权限

    首先简单了解一下user的一些属性 User对象 User对象是认证系统的核心.用户对象通常用来代表网站的用户,并支持例如访问控制.注册用户.关联创建者和内容等.在Django认证框架中只有一个用户类 ...

  4. Python网络编程(线程通信、GIL、服务器模型)

    什么是进程.进程的概念? 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间, 一般情况下,包括文本区域(text region).数据区域(data region)和堆栈( ...

  5. CSP201503-1:图像旋转

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  6. Sublime Text 3配置 Python3 开发环境

    来自 https://www.cnblogs.com/zhangqinwei/p/6886600.html Sublime Text作为一款支持多种编程语言的文本编辑神器,深受广大开发者的喜爱.通过简 ...

  7. jqprint导入jqgrid表格时,内容溢出的原因以及解决方法

    jqprint在导入表格的时候,会将原表格的样式全部拉过来,所以说原表格(如jqgrid的表格)的内容在有滚动条的时候,必须得将宽度设置为100%(等百分比的宽度),不能设置成固定宽度,不然表格内容会 ...

  8. java rmi浅谈

    首先比较下RPC和RMI的差别: 首先java提供了RMI的api,jdk1.5之后虚拟机自动生成两个类:存根类stub和骨架类skelton. stub是给客户端的,当客户端调用远程对象的一个方法时 ...

  9. MySQL中Alter用法小结

    alter 方法是我们在处理MySQL数据库中一个常见的方法,能帮助我们更好的处理数据库中的表 1.增加 数据库中表的字段:alter table table_name add [column] co ...

  10. MapReduce 并行编程理论基础

    对于mapreduce这一并行计算模型,一直以来都不是很清楚其具体的执行细节,今天看了学院一位老师的实验指导书,对这一过程有了一个初步的理解,特别是map阶段和reduce阶段,所以做了一份笔记,现在 ...