单源最短路径Dijkstra和优先级算法
百度百科:迪杰斯特拉算法。
代码实现如下:
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner; class Node
{
int x;
int value;
}
public class Main
{
static int N,M,cnt;
static final int MAX = 105;
static final int INF = 1000009;
static Node node[] = new Node[MAX];
static int map[][] = new int[MAX][MAX];
static int distence[] = new int[MAX];
static boolean vis[] = new boolean[MAX];
public static void main(String []args)
{
Scanner cin = new Scanner(System.in);
while(cin.hasNext())
{
N = cin.nextInt();
M = cin.nextInt();
if(N == 0)
{
return;
}
cnt = 0;
for(int i = 0; i < M; i++)
{
int a = cin.nextInt();
int b = cin.nextInt();
int c = cin.nextInt();
map[a][b] = c;
map[b][a] = c;
}
Dijkstra(N,M);
for(int i = 1; i <= N; i++)
{
System.out.println(distence[i]);
}
}
}
static void Dijkstra(int N,int M)
{
Init();
PriorityQueue <Node> que = new PriorityQueue<Node>(MAX,new Comparator<Node>()
{
public int compare(Node o1, Node o2)
{
if(o1.value > o2.value)
{
return 1;
}
else if(o1.value == o2.value)
{
return 0;
}
else
{
return -1;
}
} });
for(int i = 2; i <= N; i++)
{
if(map[1][i] != 0)
{
node[cnt].x = i;
node[cnt].value = map[1][i];
que.add(node[cnt]);
cnt++;
}
}
while(!que.isEmpty())
{
Node a = new Node();
a = que.poll();
if(vis[a.x] == true)
{
continue;
}
vis[a.x] = true;
for(int i = 2; i <= N; i++)
{
if(vis[a.x] == false && distence[i] > distence[a.x]+map[a.x][i])
{
distence[i] = distence[a.x]+map[a.x][i];
node[cnt].x = i;
node[cnt].value = map[a.x][i];
cnt++;
}
}
}
}
static void Init()
{
node[0] = new Node();
node[1] = new Node();
for(int i = 2; i <= N; i++)
{
if(map[1][i] != 0)
{
distence[i] = map[1][i];
}
else
{
distence[i] = INF;
}
node[i] = new Node();
}
}
}
单源最短路径Dijkstra和优先级算法的更多相关文章
- [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)
单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...
- 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)
文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- 单源最短路径问题1 (Bellman-Ford算法)
/*单源最短路径问题1 (Bellman-Ford算法)样例: 5 7 0 1 3 0 3 7 1 2 4 1 3 2 2 3 5 2 4 6 3 4 4 输出: [0, 3, 7, 5, 9] */ ...
- 单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)
Dijkstra's algorithm 迪杰斯特拉算法是目前已知的解决单源最短路径问题的最快算法. 单源(single source)最短路径,就是从一个源点出发,考察它到任意顶点所经过的边的权重之 ...
- 单源最短路径——dijkstra算法
dijkstra算法与prim算法的区别 1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的 ...
- 单源最短路径 dijkstra算法实现
本文记录一下dijkstra算法的实现,图用邻接矩阵表示,假设图为无向图.而且连通,有向图,不连通图的做法相似. 算法简述: 首先确定"单源"的源.假设是第0个顶点. 维护三个数组 ...
- matlab练习程序(单源最短路径Dijkstra)
图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾. 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流.最小割.所以熟悉一下图论算法对于图像处理还是很有帮助 ...
- 单源最短路径——Dijkstra算法学习
每次都以为自己理解了Dijkstra这个算法,但是过没多久又忘记了,这应该是第4.5次重温这个算法了. 这次是看的胡鹏的<地理信息系统>,看完之后突然意识到用数学公式表示算法流程是如此的好 ...
随机推荐
- RESTful API 最佳实践----转载阮一峰
文章地址http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
- RNA-seq标准化
你的 heatmap 可能用错数据了 (组间表达量标准化) http://www.genek.tv/article/24 RNA-seq的标准化方法罗列 https://www.jianshu.com ...
- Hashtable几种常用的遍历方法
Hashtable 在System.Collection是命名空间李Hashtable是程序员经常用到的类,它以快速检索著称,是研发人员开发当中不可缺少的利器. Hashtable表示键/值对的集合, ...
- ls file less
ls-a 列出所有文件,包含隐藏文件-l 以长格式显示结果-F 在所列出的文件后面显示其格式-r 按照文件名降序展示-t 按照时间列出-S 按照文件大小排序 file 文件名:展示文件的类型简单描述 ...
- VS2017不能弹出安装界面的原因.
如果这里选中了放大.100%入坑 解决办法: 禁用视觉主题,和元素,即可安装正常
- jq复制
function funCopy() { var va = $("#va").val(); if (va != "") { var save = ...
- mybatis的collection查询问题以及使用原生解决方案的结果
之前在springboot+mybatis环境的坑和sql语句简化技巧的第2点提到,数据库的一对多查询可以一次查询多级数据,并且把拿到的数据按id聚合,使父级表和子级表都有数据. 但是这种查询,必然要 ...
- 【题解】Luogu CF817F MEX Queries
原题传送门 817,我突然想到了某8位质数 这题珂以说是珂朵莉树的模板 三个操作都肥肠简单,前两个区间赋值,第三个区间0变1,1变0 每次输出从头开始扫描就行(我忘了珂朵莉树的性质,竟然还动态维护最左 ...
- day 06
深浅拷贝 # 值拷贝:应用场景最多ls = [1, 'abc', [10]]ls1 = ls # ls1直接将ls中存放的地址拿过来# ls内部的值发生任何变化,ls1都会随之变化ls2 = l ...
- dataguard从库移动数据文件
------------方法1从库移动数据文件路径方法1--------------将表空间offline的方法不行 1.退出日志应用alter database recover managed st ...