• 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 }
  • 相关阅读:
    洛谷 P4114 Qtree1
    洛谷 P2486 [SDOI2011]染色
    洛谷 P1505 [国家集训队]旅游
    洛谷 P4281 [AHOI2008]紧急集合 / 聚会
    C++中main函数的返回值一定要是int
    局部变量作为函数返回值
    sizeof和strlen在string类中的使用
    strlen 和 sizeof 的区别
    数据结构中的堆栈和内存中的堆栈问题
    数据类型的字长,字节问题
  • 原文地址:https://www.cnblogs.com/wally/p/2886687.html
Copyright © 2020-2023  润新知