问题
输出从起点s到所有顶点(包括s)的最短距离,并且打印起点s到最后一个顶点的最短路径
样例输入
第一行输入顶点数、边数、起点,以下输入的每行代表一条边的信息:u和v及其边权
6 8 0
0 1 1
0 3 4
0 4 4
1 3 2
2 5 1
3 2 2
3 4 3
4 5 3
样例输出
起点到各点的最短距离为:0 1 5 3 4 6
用栈打印起点s到最后一个顶点n-1的最短路径 :0 1 3 2 5
用递归打印起点s到最后一个顶点n-1的最短路径 :0 1 3 2 5
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
struct Node{
int u,d;
friend bool operator < (Node a,Node b){
//重载排序函数(从小到大)
return a.d>b.d; //重载<运算符,令d小的优先度高
}
};
const int N = 1000,INF = 1e9;
int n,m,s,G[N][N]; //n为顶点数,m为边数,s为起点
int dist[N]; //起点到达各点的最短路径长度
int path[N]; //表示从起点到顶点v的最短路径上v的前一个顶点(新添加)
int vis[N];
void Dijkstra(int s){
//s为起点
priority_queue<Node> q; //优先队列
Node node;
fi