• HDU 1879 还是prim最小生成树、


     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<string.h>
     4 const int qq=100+10,MAX=1e7;
     5 int vis[qq];
     6 int lowcost[qq][qq];
     7 int minimum[qq];
     8 int n;
     9 void prim()
    10 {
    11             int minx,k;
    12             int sum=0;
    13             vis[1]=1;
    14             for(int i=0;i<=n+1;++i)
    15                 minimum[i]=lowcost[1][i];
    16             for(int i=1;i<n;++i){
    17                 minx=MAX;
    18                 for(int j=1;j<=n;++j)
    19                     if(!vis[j] && minx > minimum[j]){
    20                         minx=minimum[j];
    21                         k=j;
    22                     }
    23                 vis[k]=1;
    24                 sum+=minx;
    25                 for(int l=1;l<=n;++l)
    26                     if(!vis[l] && minimum[l] > lowcost[k][l])
    27                         minimum[l]=lowcost[k][l];
    28             }
    29             printf("%d
    ",sum);
    30 }
    31 int main()
    32 {
    33     while(~scanf("%d",&n)&&n){
    34         for(int i=0;i<=n+1;++i)
    35             minimum[i]=MAX;
    36         for(int j,i=0;i<=n+1;++i)
    37             for(j=0;j<=n+1;++j)
    38                 lowcost[i][j]=MAX;
    39         for(int i=0;i<=n+1;++i)
    40             vis[i]=0;
    41         int i,j,cost,mark;
    42         for(int l=1;l<=n*(n-1)/2;++l){
    43             scanf("%d %d %d %d",&i,&j,&cost,&mark);
    44             if(mark==1){
    45                 lowcost[i][j]=lowcost[j][i]=0;            //已经存在路径的话直接权值为0 
    46             }
    47             else
    48                 lowcost[i][j]=lowcost[j][i]=(i==j)?0:cost;
    49         }
    50         prim();
    51     }
    52 } 

    最开始调试的时候好像memset函数使用错误,我把第二个参数写的MAX开始RE或者PE, 最后迫于无奈,直接用循环来初始化

    后来标记已经存在的路径vis分别标记i,j为1;这样我就分了三种情况讨论第一是已经标记过的点位0个,第二是已经标记过的点位n个,0~n之间就是第三种情况,调了半天发现WA了几次、最后还是直接套用prim算法来的准确,所以就说已存在路径的值直接赋值0好了

  • 相关阅读:
    经典网络还是VPC,开发者作何选择?
    经典网络还是VPC,开发者作何选择?
    文件系统的几种类型:ext3, swap, RAID, LVM
    文件系统的几种类型:ext3, swap, RAID, LVM
    ★商场上的十则寓言故事!
    ★商场上的十则寓言故事!
    【★】自制网络心理需求大排名!
    【★】自制网络心理需求大排名!
    自制mpls ldp实验
    自制mpls ldp实验
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5223441.html
Copyright © 2020-2023  润新知