一句話題意:求無向圖的最小環的長度。
emm,這應該算是模板題或者叫floyd的經典應用吧。
#include<bits/stdc++.h>
#define inf 100000000
using namespace std;
int n,m,x,y,z;
int f[105][105],g[105][105];
inline void floyd()
{
int mini=inf;
for(int k=1;k<=n;k++)
{
for(int i=1;i<k;i++)
for(int j=1;j<i;j++)
mini=min(mini,f[i][j]+g[j][k]+g[k][i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
}
if(mini!=inf)printf("%d\n",mini);
else printf("It's impossible.\n");
}
int main()
{
freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f[i][j]=g[i][j]=inf;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
f[x][y]=min(f[x][y],z);
f[y][x]=f[x][y];
g[x][y]=g[y][x]=f[x][y];
}
floyd();
}
return 0;
}
背過就好233
注意處理沒有環的情況