zoukankan      html  css  js  c++  java
  • hdu 1599 最小环

    求无向图的最小环。。。。

    floyd。。。。

    具体见代码。。。

    View Code
     1 #include<iostream>
     2 const int N=111;
     3 const int inf=1000000;
     4 #define min(x,y) ((x<y)?(x):(y));
     5 using namespace std;
     6 
     7 int dist[N][N];
     8 int edge[N][N];
     9 int n,m;
    10 
    11 void floyd(){
    12     int ans=inf;
    13     for(int i=1;i<=n;i++){
    14         for(int j=1;j<=n;j++){
    15             dist[i][j]=edge[i][j];
    16         }
    17     }
    18     //根据Floyed的原理,在最外层循环做了k-1次之后,dis[i][j]则代表了i到j的路径中所有结点编号都小于k的最短路径
    19     for(int k=1;k<=n;k++){
    20         //环的最小长度为edge[i][k]+edge[k][j]+i->j的路径中所有编号小于k的最短路径长度
    21         for(int i=1;i<k;i++){
    22             for(int j=i+1;j<k;j++){
    23                 if(dist[i][j]+edge[i][k]+edge[k][j]<inf){
    24                     ans=min(ans,dist[i][j]+edge[i][k]+edge[k][j]);
    25                 }
    26             }
    27         }
    28         //floyd原来的部分,更新dist[i][j]///
    29         for(int i=1;i<=n;i++){
    30             for(int j=1;j<=n;j++){
    31                 if(dist[i][j]>dist[i][k]+dist[k][j]){
    32                     dist[i][j]=dist[i][k]+dist[k][j];
    33                 }
    34             }
    35         }
    36     }
    37     if(ans==inf){
    38         printf("It's impossible.\n");
    39     }else 
    40         printf("%d\n",ans);
    41 }
    42 
    43 
    44 int main(){
    45     while(scanf("%d%d",&n,&m)!=EOF){
    46         for(int i=1;i<=n;i++){
    47             for(int j=1;j<=n;j++){
    48                 if(i==j){
    49                     edge[i][j]=0;
    50                 }else 
    51                     edge[i][j]=inf;
    52             }
    53         }
    54         int x,y,cost;
    55         for(int i=1;i<=m;i++){
    56             scanf("%d%d%d",&x,&y,&cost);
    57             //考虑重边
    58             if(edge[x][y]>cost){
    59                 edge[x][y]=edge[y][x]=cost;
    60             }
    61         }
    62         floyd();
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    OAuth2.0协议流程
    记多个微服务同时被kill分析
    记一次调用API遇到的问题
    win10安装mysql遇到的坑
    nagios
    rmp安装mysql5.6
    桥接模式-xshell连接虚拟机
    VMWare虚拟机-网络适配器
    ***时间目录***
    docker常用命令
  • 原文地址:https://www.cnblogs.com/wally/p/2886687.html
Copyright © 2011-2022 走看看