【java】最短路径算法

Dijkstra算法

Dijkstra算法可用于求正权图上的单源最短路径,该算法适用于有向图和无向图。如果要求每两点之间的最短路径,需要调用n次Dijkstra算法,或者使用Floyd算法。

该算法的伪代码:

清除所有点的标号
设d[0]=0,其他d[i]=INF
循环n次
{
    在所有未标号节点中,选出d值最小的节点x
    给结点x标记
    对于从x出发的所有边(x,y),更新d[y]=min{d[y],d[x]+w[x,y]}
}

更新d[y]的过程又称为松弛操作,即对迄今为止找到的v的最短路径进行改进。

先输入结点数目n,边的数目m,之后输入m行数据,每行代表一条边的起点,终点,权值,最后输入开始结点的编号,最后输出从开始结点到其余各点的最短路径。


样例输入:

7 11
0 1 7
0 3 5
1 2 8
1 3 9
1 4 7
2 4 5
3 4 15
3 5 6
4 5 8
4 6 9
5 6 11
0

样例输出:

0 7 15 5 14 11 22

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()){
			int n=scanner.nextInt();
			int m=scanner.nextInt();
			int[][] edges=new int[n][n];
			for(int i=0;i<m;i++){
				int u=scanner.nextInt();
				int v=scann
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值