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 110 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