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

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

import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Main {	static boolean []visit;	static int []u;	static int []v;	static int []w;	static int []head;	static int []next;	static int []dist;	static int m, n;	static int INF = 99999999;	static Queue
que; public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { n = in.nextInt(); m = in.nextInt(); if(n == 0 && m == 0) break; u = new int[2*m+1];//边数多一 因为从1开始 v = new int[2*m+1]; w = new int[2*m+1]; next = new int[2*m+1]; dist = new int[n+1];//顶点多一 head = new int[n+1]; visit = new boolean[n+1]; que = new LinkedList<>(); for(int i = 0; i <= n; i++ ) { head[i] = -1; } for(int i = 1; i <= m; i++ ) { u[i] = in.nextInt(); v[i] = in.nextInt(); w[i] = in.nextInt(); next[i] = head[u[i]]; head[u[i]] = i; } for(int i = m+1; i <= 2*m; i++ ) {//构建 无向图 u[i] = v[i-m]; v[i] = u[i-m]; w[i] = w[i-m]; next[i] = head[u[i]]; head[u[i]] = i; } spfa(); System.out.println(dist[n]); } } public static void spfa() { for(int i = 1; i <= n; i++ ) { dist[i] = INF; } dist[1] = 0; visit[1] = true; que.offer(1); while(!que.isEmpty()) { int from = que.poll(); visit[from] = false;//出队后 标记为未访问 int k = head[from]; while(k != -1) { if(dist[v[k]] > dist[u[k]] + w[k]) { dist[v[k]] = dist[u[k]] + w[k]; if(!visit[v[k]]) { que.offer(v[k]); } } k = next[k];//寻找下一条边 } } }}

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

你可能感兴趣的文章
kmsg_dump
查看>>
Getting a Result from an Activity
查看>>
Allowing Other Apps to Start Your Activity
查看>>
dev/mem
查看>>
pfn_valid 源码分析
查看>>
dev/kmem 和dev/mem的区别
查看>>
checkbox
查看>>
Sending Simple Data to Other Apps
查看>>
Receiving Simple Data from Other Apps
查看>>
中断API之__tasklet_schedule
查看>>
中断API之enable_irq
查看>>
中断API之disable_irq
查看>>
nova 中的guestfs
查看>>
nova中的localfs
查看>>
utils/rpm_build.sh
查看>>
查看模块参数
查看>>
udev重命名网口
查看>>
pgrep
查看>>
test-definitions/blob/master/toolset/util/parallel_cmds.py
查看>>
中断API之irq_activate
查看>>