• 继续畅通工程


    http://acm.hdu.edu.cn/showproblem.php?pid=1879

    prim:

    View Code
     1 #include <iostream>   
     2 #include <cmath>   
     3   
     4 using namespace std;  
     5 #define MAX 99999   
     6 #define LEN 101   
     7 int dist[LEN];  
     8 int map[LEN][LEN];  
     9 bool isvisited[LEN];  
    10   
    11 //初始化   
    12 void init(){  
    13     int i,j;  
    14     for(i=0;i<LEN;i++){  
    15         for(j=0;j<LEN;j++){  
    16             if(i==j) map[i][j]=0;   //对a[][]进行初始化,一般都要;   
    17             map[i][j]=MAX;  
    18         }  
    19     }  
    20 }  
    21   
    22   
    23 //prim算法   
    24 int prim(int n){  
    25     int i,j,min,pos;  
    26     int sum=0;  
    27     memset(isvisited,false,sizeof(isvisited));  
    28   
    29     //初始化   
    30     for(i=1;i<=n;i++){  
    31         dist[i]=map[1][i];  
    32     }  
    33   
    34     //从1开始   
    35     isvisited[1]=true;  
    36     dist[1]=MAX;  
    37   
    38     //找到权值最小点并记录下位置   
    39     for(i=1;i<n;i++){  
    40         min=MAX;  
    41         //pos=-1;   
    42         for(j=1;j<=n;j++){  
    43             if(!isvisited[j] && dist[j]<min){  
    44                 min=dist[j];  
    45                 pos=j;  
    46             }  
    47         }     
    48         sum+=dist[pos];//加上权值   
    49         isvisited[pos]=true;  
    50   
    51         //更新权值   
    52         for(j=1;j<=n;j++){  
    53             if(!isvisited[j] && dist[j]>map[pos][j]){  
    54                 dist[j]=map[pos][j];  
    55             }  
    56         }  
    57     }     
    58     return sum;  
    59 }  
    60   
    61 int main(){  
    62   
    63     int n;  
    64   
    65     while(cin>>n){  
    66         init();  
    67         if(n==0) break;  
    68   
    69         int i,j,a,b,d,state;  
    70   
    71         for(i=0;i<n*(n-1)/2;i++){  
    72   
    73             cin>>a>>b>>d>>state;  
    74   
    75             if(state==1){  
    76                 map[a][b]=map[b][a]=0;  
    77             }  
    78             else{  
    79                 map[a][b]=map[b][a]=d;  
    80             }  
    81         }  
    82         cout<<prim(n)<<endl;  
    83   
    84     }     
    85      return 0;  
    86 }  

    Kruskal:

    View Code
     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 struct point{
     6     int x,y;
     7     int index;
     8 }num[5008];
     9 int flag[102];
    10 int cmp(const void *a,const void *b)
    11 {
    12     struct point *c,*d;
    13     c=(struct point *)a;
    14     d=(struct point *)b;
    15     return c->index-d->index;
    16 }
    17 int father(int x)
    18 {
    19     if(x==flag[x])
    20         return x;
    21     flag[x]=father(flag[x]);
    22     return flag[x];
    23 }
    24 int main()
    25 {
    26     int n,i,sum,ra,rb,c,d;
    27     while(scanf("%d",&n),n)
    28     {
    29         for(i=0;i<=n;i++)
    30             flag[i]=i;
    31         for(i=0;i<n*(n-1)/2;i++)
    32 {
    33 scanf("%d%d%d%d",&num[i].x,&num[i].y,&c,&d);
    34 if(d==1)num[i].index=0;
    35 else num[i].index=c;
    36 }
    37         qsort(num,n*(n-1)/2,sizeof(num[0]),cmp);
    38         sum=0;
    39         for(i=0;i<n*(n-1)/2;i++)
    40         {
    41             ra=father(num[i].x);
    42             rb=father(num[i].y);
    43             if(ra==rb)continue;
    44             else {
    45                 sum+=num[i].index;
    46                 if(ra<rb)
    47                     flag[rb]=ra;
    48                 else flag[ra]=rb;
    49             }
    50         }
    51         printf("%d\n",sum);
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    1.两数之和
    [Udemy] ES 7 and Elastic Stack
    [Udemy] ES 7 and Elastic Stack
    Common Linux Commands 日常工作常用Linux命令
    ELK 学习
    web 3d 技术预研及数据可视化技术
    AWS Cloud Practioner 官方课程笔记
    怎么用 pytorch 查看 GPU 信息
    ECG 项目预研
    怎么查看keras 或者 tensorflow 正在使用的GPU
  • 原文地址:https://www.cnblogs.com/yelan/p/2948617.html
Copyright © 2020-2023  润新知