#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 505
#define INF 1e9
int G[MAXN][MAXN]={0},P[MAXN][MAXN]={0},n;
int dist[MAXN]={0};
int vis[MAXN]={0};
int cost[MAXN];
void create(){
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++){
if(i==j){
G[i][j]=P[i][j]=0;
}
else{
G[i][j]=P[i][j]=INF;
}
}
}
}
int main(){
int m,a,b,w,s,d,c;
cin>>n>>m>>s>>d;
create();
for(int i=0;i<n;i++){
dist[i]=INF;
cost[i]=INF;
}
dist[s]=0;
cost[s]=0;
while(m--){
cin>>a>>b>>w>>c;
G[a][b]=G[b][a]=w;
P[a][b]=P[b][a]=c;
}
for(int i=0;i<n;i++){
int min=INF,v=-1,pay;
for(int j=0;j<n;j++){
if(vis[j]==0&&min>dist[j]){
min=dist[j];
pay=cost[j];
v=j;
}
}
if(v==-1)
continue;
vis[v]=1;
for(int j=0;j<n;j++){
if(vis[j]==0&&dist[j]>dist[v]+G[v][j]){
dist[j]=dist[v]+G[v][j];
cost[j]=cost[v]+P[v][j];
}
else if(vis[j]==0&&dist[j]==dist[v]+G[v][j]&&cost[j]>cost[v]+P[v][j]){
cost[j]=cost[v]+P[v][j]; //当路径长度相同时候,成本等于小的那个
}
}
}
cout<<dist[d]<<" "<<cost[d]<<endl;
}
7-9 旅游规划 (25 分)
最新推荐文章于 2021-10-21 17:42:50 发布