没看懂题解p6175
查看原帖
没看懂题解p6175
756529
progress_from0楼主2022/11/5 18:16
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	const int MAX=105,INF=150000000;
	int dis[MAX][MAX]={0},tmp[MAX][MAX]={0};
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j){
				dis[i][j]=INF;
				tmp[i][j]=INF;
			}
		}
	}
	for(int i=0;i<m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		w=min(w,dis[u][v]);
		dis[u][v]=w;
		dis[v][u]=w;//输入
		tmp[u][v]=w;
		tmp[v][u]=w;
	}
	int ans=INF;
	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,tmp[i][j]+dis[i][k]+dis[k][j]);     //求环的最小值
                //就是这两层循环没有看懂!!!哪位大佬详细讲讲?
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				tmp[i][j]=min(tmp[i][j],tmp[i][k]+tmp[k][j]);    //Floyd
				tmp[j][i]=tmp[i][j];
			}
		}
	}
	if(ans!=INF) cout<<ans<<endl;
    else cout<<"No solution."<<endl;  //无解
	return 0;
} 
2022/11/5 18:16
加载中...