博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优先队列优化的 Dijkstra算法
阅读量:4215 次
发布时间:2019-05-26

本文共 1835 字,大约阅读时间需要 6 分钟。

import java.util.ArrayList;import java.util.PriorityQueue;import java.util.Scanner;public class Main {	PriorityQueue
pq; ArrayList
[]adj; int []distTo; int n, m; public static void main(String[] args) { new Main().run(); } public void run() { Scanner in = new Scanner(System.in); while(in.hasNext()) { n = in.nextInt(); m = in.nextInt(); if(n == 0 && m == 0) { break; } distTo = new int[n+1]; pq = new PriorityQueue<>(); adj = new ArrayList[n+1]; for(int i = 1; i <= n; i++ ) { adj[i] = new ArrayList<>(); } for(int i = 0; i < m; i++ ) { int u = in.nextInt(); int v = in.nextInt(); int w = in.nextInt(); adj[u].add(new Edge(u, v, w)); adj[v].add(new Edge(v, u, w)); } dijkstra(); System.out.println(distTo[n]); } } public void dijkstra() { for(int i = 1; i <= n; i++ ) { distTo[i] = Integer.MAX_VALUE; } distTo[1] = 0; pq.offer(new dist(1, 0)); while(!pq.isEmpty()) { int v = pq.poll().v; for(Edge e: adj[v]) { int w = e.v; if(distTo[w] > distTo[v] + e.w) { distTo[w] = distTo[v] + e.w; pq.offer(new dist(w, distTo[w])); } } } }} class Edge{ int u, v, w; public Edge(int u, int v, int w) { this.u = u; this.v = v; this.w = w; }}class dist implements Comparable
{//顶点v 与 与distTo[v]->w int v; int w; public dist(int v, int w) { this.v = v; this.w = w; } public int compareTo(dist o) { return w > o.w ? 1 : -1; }}

临接矩阵的Dijkstra快速写法

for(int i = 1; i <= n; i++ ) {			dist[i] = map[1][i];		}		visit[1] = true;		while(true) {			int v = -1;			for(int u = 1; u <= n; u++ ) {				if(!visit[u] && (v == -1 || dist[u] < dist[v])) {					v = u;				}			}			if(v == -1)				break;			visit[v] = true;			for(int w = 1; w <= n; w++ ) {				if(map[v][w] < INF)					dist[w] = Math.min(dist[w], dist[v]+map[v][w]);			}		}

转载地址:http://plimi.baihongyu.com/

你可能感兴趣的文章
Hive数据倾斜
查看>>
TopK问题
查看>>
Hive调优
查看>>
HQL排查数据倾斜
查看>>
DAG以及任务调度
查看>>
LeetCode——DFS
查看>>
MapReduce Task数目划分
查看>>
ZooKeeper分布式锁
查看>>
3126 Prime Path
查看>>
app自动化测试---ADBInterface驱动安装失败问题:
查看>>
RobotFramework+Eclipse安装步骤
查看>>
测试的分类
查看>>
photoshop cc2019快捷键
查看>>
pycharm2019版本去掉下划线的方法
查看>>
九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)
查看>>
leetcode 13: Roman to Integer
查看>>
a标签中调用js方法
查看>>
js函数中传入的event参数
查看>>
[hive]优化策略
查看>>
c++14现代内存管理
查看>>