#include <iostream>
#include <cstring>
using
namespace
std;
const
int
N = 1001;
const
int
MAX = 1 << 30;
int
dm[N][N];
int
pm[N][N];
int
minDis, minCost;
void
dijkstra(
int
s,
int
t,
int
n);
int
main(){
int
n, m;
while
(cin >> n >> m){
if
(n==0 && m==0)
break
;
for
(
int
i=1; i<=n; i++){
for
(
int
j=1; j<=n; j++){
dm[i][j] = MAX;
pm[i][j] = MAX;
}
}
for
(
int
i=0; i<m; i++){
int
a, b, d, p;
cin >> a >> b >> d >> p;
if
(dm[a][b] > d){
dm[a][b] = dm[b][a] = d;
pm[a][b] = pm[b][a] = p;
}
else
if
(dm[a][b]==d && pm[a][b]>p){
pm[a][b] = pm[b][a] = p;
}
}
int
s, t;
cin >> s >> t;
dijkstra(s, t, n);
cout << minDis <<
' '
<< minCost << endl;
}
return
0;
}
void
dijkstra(
int
s,
int
t,
int
n){
int
dis[N];
int
cost[N];
for
(
int
i=1; i<=n; i++){
dis[i] = MAX;
cost[i] = MAX;
}
bool
visit[N];
memset
(visit,
false
,
sizeof
(visit));
dis[s] = 0;
cost[s] = 0;
for
(
int
i=0; i<n; i++){
int
min = MAX;
int
k;
for
(
int
j=1; j<=n; j++){
if
(!visit[j] && dis[j]<min){
min = dis[j];
k = j;
}
}
visit[k] =
true
;
for
(
int
j=1; j<=n; j++){
if
(!visit[j] && dis[j]>min+dm[k][j]){
dis[j] = min + dm[k][j];
cost[j] = cost[k] + pm[k][j];
}
else
if
(!visit[j] && dis[j]==min+dm[k][j] && cost[j]>cost[k]+pm[k][j]){
cost[j] = cost[k] + pm[k][j];
}
}
}
minDis = dis[t];
minCost = cost[t];
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~