算法基本思想:每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径。

  1、将所有的顶点分为两个部分:已知最短路程的顶点集合P和未知最短路径的顶点集合Q

  2、设置源点s到自己的最短路径为0,若存在有源点能够直接到达的顶点i则吧dis[i]设置为e[s][i]。同时把所有其它不能直接到达的顶点的最短路径设置为∞

  3、在集合Q的所有顶点中选择一个离源点s最近的顶点u即dis[u]最小,加入到集合P。并考察所有以点u为起点地边,对每条边进行松弛操作。

  4、重复第三步,直到集合Q为空,算法结束。最终dis数组中的值就是源点到所有顶点的最短路径。

//dijketra算法
int main()
{
int e[][];
int book[];
int dis[];
int i, j, n, m, t1, t2, t3, u, v, min;
int inf = ;//用inf存储一个我们认为的正无穷值 //读入n和m;n表示定点个数,m表示边的条数
scanf("%d%d",&n,&m); //初始化e矩阵
for (i = ; i <= n; i++)
for (j = ; j <= n; j++)
if (i == j) e[i][j] = ;
else e[i][j] == inf; // 读入边
for (i = ; i <= m; i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
e[t1][t2] = t3;
}
//初始化dis数组,这里是1号顶点到其余各个顶点的初始路程。
for (i = ; i <= n; i++)
dis[i] = e[][i]; //book数组初始化,book数组用来记录当前点是否被访问,访问1 else0
for (i = ; i <= n; i++)
book[i] = ;
book[] = ;//一号顶点标记 //核心算法
for (i = ; i <= n - ; i++)
{
//找到离一号顶点最近的顶点
min = inf;//将最小值复制为无穷
for (j = ; j <= n; j++)
{
//如果当前顶点没有被访问,并且当前dis数组中的值小于最小值
if (book[j] == && dis[j] < min)
{
min = dis[j];//更新最小值
u = j;// 标记当前点
}
}
book[u] = ;//标记当前点被访问
for (v = ; v <= n; v++)
{
if (e[u][v] < inf)
{
//遍历u打头的e数组
if (dis[v] > dis[u] + e[u][v])
dis[v] = dis[u] + e[u][v];//获得最短路径
}
}
}
//输出结果
for (i = ; i <= n; i++)
{
printf("%d\t",dis[i]);
}
getchar(); getchar();
return ;
}

单源最短路——Dijkstara算法的更多相关文章

  1. 单源最短路——Bellman-Ford算法

    1.Dijkstra的局限性 Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的. 列如以 ...

  2. 单源最短路——dijkstra算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...

  3. 图论-单源最短路-SPFA算法

    有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...

  4. 单源最短路 Bellman-Ford算法(有向图)

    // 单源最短路问题 // Bellman-Ford算法 // 复杂度O(V*E) //! 可以判断负圈 #include <cstdio> #include <iostream&g ...

  5. 单源最短路dijkstra算法&&优化史

    一下午都在学最短路dijkstra算法,总算是优化到了我能达到的水平的最快水准,然后列举一下我的优化历史,顺便总结总结 最朴素算法: 邻接矩阵存边+贪心||dp思想,几乎纯暴力,luoguTLE+ML ...

  6. 单源最短路Dijkstra算法——matlab实现

    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止. 基本思想 通过Dijk ...

  7. 单源最短路(Dijkstra算法)

    #返回上一级 @Author: 张海拔 @Update: 2015-03-11 @Link: http://www.cnblogs.com/zhanghaiba/p/3514570.html Dijk ...

  8. 单源最短路——SPFA算法(Bellman-Ford算法队列优化)

    spfa的算法思想(动态逼近法):     设立一个先进先出的队列q用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路 ...

  9. 单源最短路Dijstra算法

    Dijstra算法是寻找从某一顶点i出发到大其他顶点的最短路径.Distra算法的思想与Prim算法很像,它收录顶点的规则是按照路径长度递增的顺序收录的.设v0是源顶点,我们要寻找从v0出发到其他任意 ...

随机推荐

  1. 通过java递归思想实现以树形方式展现出该目录中的所有子目录和文件

    当初在开始接触Java时  学习File部分的一个小练习  挺有意思 一开始是通过看 北京圣思园 张龙老师的视频开始学校java的,必须强烈推荐,真很棒. 功能实现:主要实现以树形方式展现出该目录中的 ...

  2. mac更改launchpad图标大小

    设置每列显示的图标数目为8 defaults write com.apple.dock springboard-columns -int 8设置每行显示的图标数目为7 defaults write c ...

  3. unity(2017.3) C# 常用API

    1. 获取物体的 GetComponent playerRigidbody = GetComponent<Rigidbody> (); GetComponent<Animatro&g ...

  4. SQLite可视化工具SQLite studio

    特点: 1.轻量级2.独立性,没有依赖,无需安装3.隔离性 全部在一个文件夹系统4.跨平台 支持众多操作系统5.多语言接口 支持众多编程语言6.安全性 事物,通过独占性和共享锁来实现独立事务的处理,多 ...

  5. 11.5vue(5)完结

    2018-11-5 19:03:50 老师用了五天把vue昨晚,前后端分离!就是 后端给前端接口,前端用vue,建个项目,然后用vuex接受数据!全在前端显示 后端不涉及任何前端页面!前端用vue把页 ...

  6. cf 1132 F

    区间dp.. 每次删一串相邻的一样的,问多少次删光. 感觉想的几乎是一样的怎么比赛时就过不了呢...一定是因为我挂机睡觉了 考虑l和r相等,l和l+1相等,r和r-1相等这三种情况就行了..然后就是裸 ...

  7. linux的基本操作(文本编辑工具vim)

    文本编辑工具vim * 命令模式:在一般模式下,输入”:”或者”/”即可进入命令模式.在该模式下,你可以搜索某个字符或者字符串,也可以保存.替换.退出.显示行号等等. 下面笔者教你如何在一个空白文档中 ...

  8. linux 系统全盘恢复

    恢复备份 一.准备 1. 从 u盘启动,进入 live-cd 系统,配置好网络和镜像源,更新一下仓库的数据库. sudo pacman -Syy 2. 安装 timeshift 这个软件. sudo ...

  9. 15.vue动画& vuex

    Vue.config.productionTip = false; ==是否显示提示信息== ==import/export== export xxx 必须跟跟对象或者和定义一起 对象: export ...

  10. vue的事件对象,方法执行

    方法都写在methods重,有两种写法:1. getMsg:function(){ alert(); },  这种写法就是对象中的方法 2. getMsg1(){ alert(); }注意没有func ...