给定一个带权有向图G=(V,E),其中每条边的权是一个实数。另外,还给定V中的一个顶点,称为源。要计算从源到其他所有各顶点的最短路径长度。这里的长度就是指路上各边权之和。这个问题通常称为单源最短路径问题。利用Dijkstra算法计算图1中源点s到其他顶点的最短路径。
输入格式 第一行包含三个整数n,m,s分别表示点的个数、有向边的个数、出发点的编号。 接下来m行每行包含三个整数u,v,w 表示一条从u→v,长度为w的有向边。 输出格式 输出一行n个整数,第i个表示源点s到第i个点的最短路径,若不能达到则输出-9999.
输入样例 4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4
输出样例 0 2 4 3
#include <stdio.h>
#include <limits.h>
#include <malloc.h>
#include <stdbool.h>
// 点的定义
typedef struct Point {
int dis;
bool visit;
} Point;
int MIN(int dis, int i);
int start = 1;
// Dijkstra算法
void Dijkstra(int **g, int vexNum) {
Point