百度百科:迪杰斯特拉算法。

代码实现如下:

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和优先级算法的更多相关文章

  1. [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)

    单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...

  2. 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)

    文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...

  3. 单源最短路径Dijkstra算法,多源最短路径Floyd算法

    1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...

  4. 单源最短路径问题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] */ ...

  5. 单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)

    Dijkstra's algorithm 迪杰斯特拉算法是目前已知的解决单源最短路径问题的最快算法. 单源(single source)最短路径,就是从一个源点出发,考察它到任意顶点所经过的边的权重之 ...

  6. 单源最短路径——dijkstra算法

    dijkstra算法与prim算法的区别   1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的 ...

  7. 单源最短路径 dijkstra算法实现

    本文记录一下dijkstra算法的实现,图用邻接矩阵表示,假设图为无向图.而且连通,有向图,不连通图的做法相似. 算法简述: 首先确定"单源"的源.假设是第0个顶点. 维护三个数组 ...

  8. matlab练习程序(单源最短路径Dijkstra)

    图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾. 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流.最小割.所以熟悉一下图论算法对于图像处理还是很有帮助 ...

  9. 单源最短路径——Dijkstra算法学习

    每次都以为自己理解了Dijkstra这个算法,但是过没多久又忘记了,这应该是第4.5次重温这个算法了. 这次是看的胡鹏的<地理信息系统>,看完之后突然意识到用数学公式表示算法流程是如此的好 ...

随机推荐

  1. python爬虫中scrapy框架是否安装成功及简单创建

    判断框架是否安装成功,在新建的爬虫文件夹下打开盘符中框输入cmd,在命令中输入scrapy,若显示如下图所示,则说明成功安装爬虫框架: 查看当前版本:在刚刚打开的命令框内输入scrapy versio ...

  2. 读HashMap 源码(jdk11)的见解

    如果想系统详细的了解HashMap请移步各大佬博客.这篇文章只是个人的一些见解. 数组+链表 或 数组+红黑树.这种说法感觉有迷惑性. 之前看博客都说 HashMap 的存储是数组+链表(jdk6), ...

  3. react组件实现扩展知识

    react-redux redux-thunk 实现异步action, ajax,定时器 redux-gen 利用生成器,实现middleware react-router-redux react-r ...

  4. html5 css折叠导航栏

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. Oracle中row_number()、rank()、dense_rank() 的区别

    link:https://www.cnblogs.com/qiuting/p/7880500.html

  6. Linux基础命令---dmeg显示内核输出

    dmesg dmesg指令用来打印和控制内核的输出信息,这些信息保存早ring buffer中. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.SUSE.open ...

  7. Linux常用的基础命令总结

    man 查看英文命令帮助   可以看作--help 拷贝目录的命令cp -a  包含所有 ls -a 显示所有文件包括隐藏文件  -ld ls -F 过滤目录文件(给不同类型文件结尾加上不同的符号) ...

  8. LabVIEW中开放隐藏属性的inikey

    SuperSecretPrivateSpecialStuff=TRUE 在LabVIEW中有很多属性和方法是隐藏的,在labview安装根目录下的ini中添加该信息能开放这些隐藏的属性和方法.这时候能 ...

  9. 【awk】用awk将Fasta文件序列变成一行

    awk: awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" &q ...

  10. java的lamda表达式

    Java8才支持lamda表达式  lamda是一中函数式编程语言 通过实现模式是匿名内部类 java使用内部类实现接口 首先定义一个接口 @FunctionalInterfaceinterface ...