噢莫加纳加加加 • 16天前
//弗洛伊德
#include<bits/stdc++.h>
using namespace std;
int n,m;
int dis[205][205];
int city[205][205];
bool imp[205];
int main(){
cin>>n>>m;
memset(dis,0x3f,sizeof dis);
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
dis[u][v]=min(dis[u][v],w);
dis[v][u]=min(dis[v][u],w);
}
for(int i=1;i<=n;i++){ //中转点
for(int j=1;j<=n;j++) if(j!=i){
for(int k=1;k<=n;k++) if(i!=j&&i!=k&&j!=k){
if(dis[j][k]>dis[j][i]+dis[i][k]){
dis[j][k]=dis[j][i]+dis[i][k];
city[j][k]=i;
}else if(dis[j][k]==dis[j][i]+dis[i][k]){
city[j][k]=0;
}
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) imp[city[i][j]]=true;
bool f=false;
for(int i=1;i<=n;i++){
if(imp[i]){
f=true;
cout<<i<<' ';
}
}
if(!f) cout<<"No important cities.\n";
return 0;
}
评论:
请先登录,才能进行评论