[hdu1599]find the mincost route

一句話題意:求無向圖的最小環的長度。

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

注意處理沒有環的情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章