csm
2024-08-15 17:02:31
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m;
int g[N][N];
int f[N][N];
void init()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g[i][j]=f[i][j];
}//重新赋值
int main()
{
cin>>n>>m;
memset(g,0x3f,sizeof g);
while(m--)
{
int a,b,w;
cin>>a>>b>>w;
g[a][b]=g[b][a]=w;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
f[i][j]=g[i][j];
}//先做一遍floyd
int ans=2e9;//赋值很大的一个数
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
{
g[i][j]=g[j][i]=0;
for(int k1=1;k1<=n;k1++)
for(int k2=1;k2<=n;k2++)
g[k1][k2]=min(g[k1][k2],g[k1][i]+g[i][k2]);
for(int k1=1;k1<=n;k1++)
for(int k2=1;k2<=n;k2++)
g[k1][k2]=min(g[k1][k2],g[k1][j]+g[j][k2]);
//做floyd
int res=0;
for(int k1=1;k1<=n;k1++)
for(int k2=1;k2<k1;k2++)
res+=g[k1][k2];//求和
ans=min(ans,res);
init();
}
cout<<ans;
return 0;
}
全部评论 3
#include<bits/stdc++.h> using namespace std; const int N = 110; int n, m; int g[N][N]; int f[N][N]; void init() { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) g[i][j] = f[i][j]; }//重新赋值 int main() { cin >> n >> m; memset(g, 0x3f, sizeof g); while (m--) { int a, b, w; cin >> a >> b >> w; g[a][b] = g[b][a] = w; } for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { g[i][j] = min(g[i][j], g[i][k] + g[k][j]); f[i][j] = g[i][j]; }//先做一遍floyd int ans = 2e9; //赋值很大的一个数 for (int i = 1; i <= n; i++) for (int j = 1; j < i; j++) { g[i][j] = g[j][i] = 0; for (int k1 = 1; k1 <= n; k1++) for (int k2 = 1; k2 <= n; k2++) g[k1][k2] = min(g[k1][k2], g[k1][i] + g[i][k2]); for (int k1 = 1; k1 <= n; k1++) for (int k2 = 1; k2 <= n; k2++) g[k1][k2] = min(g[k1][k2], g[k1][j] + g[j][k2]); //做floyd int res = 0; for (int k1 = 1; k1 <= n; k1++) for (int k2 = 1; k2 < k1; k2++) res += g[k1][k2]; //求和 ans = min(ans, res); init(); } cout << ans; return 0; }
2024-08-15 来自 浙江
3Yuilice牢失太师了太师了没入受🤣👍
2024-08-15 来自 浙江
1劳师这是哪一道题啊?
2024-08-17 来自 北京
0
有帮助,赞一个