单源最短路径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次重温这个算法了. 这次是看的胡鹏的<地理信息系统>,看完之后突然意识到用数学公式表示算法流程是如此的好 ...
随机推荐
- MYSQL.版本查看-LINUX
MYSQL.版本查看-LINUX 方式1: 不需登录mysql,登录Linux服务后,执行如下指令: # mysql -V 注意: 那个是大写的V,如果使用小写的v,在root没有设置密码的情况下,就 ...
- 微信小程序之回调函数
在微信小程序中众所周知在js里面得方法都是异步执行,我最近再做项目得时候也遇到了这个问题,再方法里面调用另一个方法里面的接口数据,第一次是调取不到的, 因为两个方法是同时开始执行得,所以怎么都取不到值 ...
- spring boot 热部署,省去频繁编译的步骤
一.热启动: 每自修改后, 程序自动启动Spring Application上下文. Pom中直接添加依赖即可: <dependency> <groupId&g ...
- SSM框架和SSH框架的区别
SSH和SSM定义 SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层. SSM 则指的是 SpringMVC 做控制 ...
- python安装pip的步骤记录
因为重新装了系统,所以python所有的环境都要重新走一遍. 首先去python官网下载python最新版本.如果python没有自动加入环境变量的话就需要你自己手动加入.这个一般在安装python的 ...
- 我的python思考
1.因为例如线性代数之类的数学题较难解决,会耽误我很长时间,所以我希望课程涉及关于数学的库的使用:因为各种考试,例如英语四六级甚至研究生考试各种单词或者关键词都会有使用频率,所以我希望涉及爬虫的应用. ...
- STS4 add spring bean configuration file
转自:https://blog.csdn.net/asc_123456/article/details/83216577
- OO第二次博客作业—17373247
OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...
- Java处理对象
1.打印对象和toString 方法 toString() 方法是Object 类的一个实例方法,所有的Java类都是Object类的子类,因此所有的Java对象都是具有toString()方 ...
- Eclipse插件:Spket
1,破解文件32bit不适用 java -jar spket-1.6.18.jar: