- 观光旅游
- 2017-05-10 13:05:44 @
#include<bits/stdc++.h>
using namespace std;
const int maxn=101;
int w[maxn][maxn];
int flag=0;
int edge[maxn][maxn];
int n,m;
int ans=1e9;
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<k;i++)
for(int j=i+1;j<k;j++){
ans=min(ans,edge[i][k]+edge[k][j]+w[i][j]);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i!=j)
w[i][j]=min(w[i][j],w[i][k]+w[k][j]);
}
}
if(ans==1e9)
flag=1;
}
void init(){
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++){
edge[i][j]=w[i][j]=1e9;
}
}
int main(){
while(cin>>n>>m){
init();
ans=1e9;
int a,b,c;
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
edge[a][b]=edge[b][a]=w[a][b]=w[b][a]=c;
}
floyd();
if(flag==1)
cout<<"No solution."<<endl;
else
cout<<ans<<endl;
}
return 0;
}
1 条评论
-
PowderHan LV 10 @ 2017-05-12 22:25:32
我有数据的说要不您试试?
- 1