#include<iostream>
using namespace std
;
const int maxn
= 1010;
const int inf
= 0x3f3f3f3f;
bool vis
[maxn
];
int pre
[maxn
];
int m
[maxn
][maxn
];
int dis
[maxn
];
int n
,e
;
int u
,v
,w
;
void Dijkstra(int cost
[][maxn
],int lowcost
[],int n
,int beg
){
for(int i
= 0;i
< n
;i
++){
lowcost
[i
] = inf
;
vis
[i
] = false
;
pre
[i
] = -1;
}
lowcost
[beg
] = 0;
for(int j
= 0;j
< n
;j
++){
int k
= -1;
int minn
= inf
;
for(int i
= 0;i
< n
;i
++){
if(!vis
[i
] && lowcost
[i
]<minn
){
k
= i
;
minn
= lowcost
[i
];
}
}
if(k
== -1){
break;
}
vis
[k
] = true
;
for(int i
= 0;i
< n
;i
++){
if(!vis
[i
] && lowcost
[i
] > lowcost
[k
] + cost
[k
][i
]){
lowcost
[i
] = lowcost
[k
] + cost
[k
][i
];
pre
[i
] = k
;
}
}
}
}
void dispath(int n
){
if(n
!= -1){
dispath(pre
[n
]);
cout
<< n
;
}
return;
}
int main()
{
cin
>> n
;
for(int i
= 0;i
< n
;i
++){
for(int j
= i
+ 1;j
< n
;j
++){
m
[i
][j
] = m
[j
][i
] = inf
;
}
}
cin
>> e
;
while(e
--){
cin
>> u
>> v
>> w
;
m
[u
][v
] = m
[v
][u
] = w
;
}
Dijkstra(m
,dis
,n
,0);
for(int i
= 0;i
< n
;i
++)
cout
<< dis
[i
] << " ";
cout
<< endl
;
cout
<< "输入查询的点:";
cin
>> n
;
dispath(n
);
return 0;
}
转载请注明原文地址: https://mac.8miu.com/read-513498.html