2.Dijkstra算法O (N2)
用来计算从一个点到其他所有点的最短路径的算法,是一种单源最短路径算法。也就是说,只能计算起点只有一个的情况
Dijkstra的时间复杂度是O (N2),它不能处理存在负边权的情况
算法描述:
       设起点为sdis[v]表示从sv的最短路径,pre[v]v的前驱节点,用来输出路径。
       a)初始化:dis[v]=(vs); dis[s]=0; pre[s]=0;
       b)For (i = 1; i <= n ; i++)
            1.在没有被访问过的点中找一个顶点u使得dis[u]是最小的。
            2.u标记为已确定最短路径
            3.For u相连的每个未确定最短路径的顶点v
              if  (dis[u]+w[u][v]<dis[v])
               {
                  dis[v]=dis[u]+w[u][v];
                  pre[v]=u;
               }
        c)算法结束:dis[v]sv的最短距离;pre[v]v的前驱节点,用来输出路径。
 #include<cstdio>
#include<cstring>
#define N 1010
#define MAXX 9999999
int dis[N];
int map[N][N];
int qq[N];
int que[N];
int n,m,bein,s,ss;
int visit[N];
void work(int s)
{
visit[s]=;
for(int k=;k<=n;++k)
{
dis[k]=map[s][k];
if(map[s][k]!=MAXX)qq[k]=s;
else qq[k]=;
}
visit[s]=;
dis[s]=;
for(int I=;I<n;++I)
{
int k=s,minn=MAXX;
for(int j=;j<=n;++j)
{
if(!visit[j]&&dis[j]<minn)
{
minn=dis[j];
k=j;
}
}
visit[k]=;
for(int i=;i<=n;++i)
{
if(map[k][i]&&!visit[i]&&dis[i]>dis[k]+map[k][i])
{
dis[i]=dis[k]+map[k][i];
qq[i]=k;
}
}
}
printf("%d\n",dis[ss]);
}
void print (int u,int v )
{
int tot=;
que[tot]=v;
tot++;
int temp=qq[v];
while(temp!=u)
{ que[tot]=temp;
tot++;
temp=qq[temp];
}
que[tot]=u;
for(int i=tot;i>=;i--)
if(i!=)
printf("%d->",que[i]);
else
printf("%d",que[i]); }
int main()
{
scanf("%d%d",&n,&m);
memset(dis,MAXX,sizeof(dis));
memset(map,MAXX,sizeof(map));
for(int i=;i<=m;++i)
{
int x,y,q;
scanf("%d%d%d",&x,&y,&q);
map[x][y]=q;
map[y][x]=q;
}
scanf("%d%d",&s,&ss);
work(s);
print(s,ss);
return ;
}

图论-最短路径 2.Dijkstra算法O (N2)的更多相关文章

  1. 经典树与图论(最小生成树、哈夫曼树、最短路径问题---Dijkstra算法)

    参考网址: https://www.jianshu.com/p/cb5af6b5096d 算法导论--最小生成树 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. im ...

  2. 单源最短路径(dijkstra算法)php实现

    做一个医学项目,当中在病例评分时会用到单源最短路径的算法.单源最短路径的dijkstra算法的思路例如以下: 如果存在一条从i到j的最短路径(Vi.....Vk,Vj),Vk是Vj前面的一顶点.那么( ...

  3. 【算法设计与分析基础】25、单起点最短路径的dijkstra算法

    首先看看这换个数据图 邻接矩阵 dijkstra算法的寻找最短路径的核心就是对于这个节点的数据结构的设计 1.节点中保存有已经加入最短路径的集合中到当前节点的最短路径的节点 2.从起点经过或者不经过 ...

  4. 数据结构与算法--最短路径之Dijkstra算法

    数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...

  5. 最短路径 | 深入浅出Dijkstra算法(一)

    参考网址: https://www.jianshu.com/p/8b3cdca55dc0 写在前面: 上次我们介绍了神奇的只有五行的 Floyd-Warshall 最短路算法,它可以方便的求得任意两点 ...

  6. 图论基础之Dijkstra算法的初探

         图论,顾名思义就是有图有论.        图:由点"Vertex"和边"Edge "组成,且图分为有向图和无向图(本文讨论有向图),之前做毕业设计的 ...

  7. 25最短路径之Dijkstra算法

    图的最优化问题:最小生成树.最短路径 典型的图应用问题 无向连通加权图的最小生成树 有向/无向加权图的最短路径 四个经典算法 Kruskal算法.Prim算法---------------最小生成树 ...

  8. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  9. python数据结构与算法——图的最短路径(Dijkstra算法)

    # Dijkstra算法——通过边实现松弛 # 指定一个点到其他各顶点的路径——单源最短路径 # 初始化图参数 G = {1:{1:0, 2:1, 3:12}, 2:{2:0, 3:9, 4:3}, ...

随机推荐

  1. Python version 3.6 required, which was not found in the registry错误解决

    问题: 安装pywin32出现Python version 3.6 required, which was not found in the registry错误解决 解决: 建立一个文件 regis ...

  2. Kali-linux使用Nessus

    Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Nessus不同于传统的漏洞扫描软件,Nessus可同时在 ...

  3. [运维笔记] Mysql单库备份脚本

    工作中用到的Mysql单库备份Shell脚本,压缩备份,并在Crontab中添加计划任务,最多保存60天的备份 #!/bin/bash . /etc/profile USERNAME=zabbix P ...

  4. 移动端h5列表页上拉加载更多

    背景 上星期公司要求做一个回收书籍的h5给安卓用,里面有一个功能是回收记录列表.设计师那边出的稿子是没有要求分页或者是上拉刷新的,但是众所周知,列表页数据很多的情况下,h5加载是很慢的.所以我一开始是 ...

  5. 京东7Fresh新零售架构设计分析

    7Fresh是京东第一个线上线下融合落地的零售创新业务模式,店内有大量设备的集成,设备供应商达50多家,针对线下业务的特点,团队独立规划和设计POS收银系统.店内生产系统.加工系统.货架陈列系统.魔镜 ...

  6. iOS:Masonry约束经验(19-03-21更)

    1.label约束: 1).只需约束x.y 点相关就行.宽高 长度相关不用约束,就算用boundingRectWithSize计算出来的,也可能不准. 如:top.bottom二选一,trailing ...

  7. [NOI2015]软件包管理器(树链剖分,线段树)

    题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...

  8. Windows环境下写Linux sh脚本的一次挖坑和填坑

    最近在研究Docker集群和安装的时候,需要准备若干台机器.所以我为节约时间,打算批量复制VM机器,然后用sh脚本命令执行机器名称和IP等基础配置信息的修改. 具体操作:我在windows环境下,用N ...

  9. 自定义loading效果

    结合Font Awesome字体图标自定义loading效果 Font Awesome字体图标地址:http://www.fontawesome.com.cn/faicons/ 使用javascrip ...

  10. Flume(1)-概述与组成架构

    一. 定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume基于流式架构,灵活简单. 二. 优点 1. 可以和任意集中式存储进程集成. 2. ...