思路:迪杰斯特拉算法求最短路径,只是需要考虑花费钱的最小值进行刷新(当路径相同时)
PS:迪杰斯特拉算法求有起点和终点的最短路径区分最小生成树.
#include<iostream>
#include<cstdio>
#define MIN 65535
using namespace std;
int map[1100][1100];
int key[1100];
int len[1100];
int lenmap[1100][1100];
int cost[1100];
int costmap[1100][1100];
int main(){
int n,m,s,d;
cin>>n>>m>>s>>d;
for(int i = 0;i < m;i++){
int st,ed,v,c;
cin>>st>>ed>>v>>c;
map[st][ed] = map[ed][st] = 1;
lenmap[st][ed] = lenmap[ed][st] = v;
costmap[st][ed] = costmap[ed][st] = c;
}
for(int i = 0;i < n;i++){
len[i] = MIN;
cost[i] = MIN;
}
len[s] = 0;
key[s] = 1;
cost[s] = 0;
int index = s;
int num = n - 1;
while(num--){