zoukankan      html  css  js  c++  java
  • Networking---poj1287最小生成树

    http://poj.org/problem?id=1287

    最小生成树模板题类似的还有:poj1258  hdu1233代码几乎一样;

    最小生成树详解

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<math.h>
     6 #include<map>
     7 #define N 110
     8 #define INF 0xfffffff
     9 using namespace std;
    10 
    11 int ans, n, m, dist[N], maps[N][N], vis[N];//dist[i]代表当前起点到i的最小距离;
    12 
    13 void Init()
    14 {
    15     for(int i=0; i<=n; i++)
    16     {
    17         dist[i] = INF;
    18         vis[i] = 0;
    19         for(int j=0; j<=n; j++)
    20         if(i==j)
    21             maps[i][j] = 0;
    22         else
    23             maps[i][j] = INF;
    24     }
    25 }
    26 
    27 void Prim(int start)
    28 {
    29     for(int i=1; i<=n; i++)
    30         dist[i] = maps[start][i];
    31     vis[start] = 1;
    32     for(int i=1; i<=n; i++)
    33     {
    34         int Min = INF, index=-1;
    35 
    36         for(int j=1; j<=n; j++)
    37         {
    38             if(vis[j]==0 && Min>dist[j])
    39             {
    40                 Min = dist[j];
    41                 index = j;
    42             }
    43         }
    44         if(index == -1)break;
    45         vis[index] = 1;
    46         ans += Min;
    47         for(int j=1; j<=n; j++)
    48         {
    49             if(vis[j]==0 && maps[index][j] < dist[j])
    50             {
    51                 dist[j] = maps[index][j];
    52             }
    53         }
    54     }
    55 }
    56 
    57 int main()
    58 {
    59     int a, b, c;
    60     while(scanf("%d", &n),n)
    61     {
    62         ans=0;
    63         Init();
    64         scanf("%d", &m);
    65         for(int i=0; i<m; i++)
    66         {
    67             scanf("%d%d%d", &a, &b, &c);
    68             maps[a][b] = maps[b][a] = min(maps[a][b], c);
    69         }
    70         Prim(1);
    71         printf("%d
    ", ans);
    72     }
    73     return 0;
    74 }
    prim
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<map>
    #define N 110
    #define INF 0xfffffff
    using namespace std;
    
    int n, f[N], m;
    
    struct node
    {
        int x, y, d;
    }a[N*N];
    
    int cmp(node p, node q)
    {
        return p.d < q.d;
    }
    
    int Find(int x)
    {
        if(x != f[x])
            f[x] = Find(f[x]);
        return f[x];
    }
    
    int main()
    {
        int ans, px, py;
        while(scanf("%d", &n),n)
        {
            ans=0;
            for(int i=0; i<=n; i++)
                f[i] = i;
            scanf("%d", &m);
            for(int i=0; i<m; i++)
            {
                scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].d);
            }
            sort(a, a+m, cmp);
            for(int i=0; i<m; i++)
            {
                px = Find(a[i].x);
                py = Find(a[i].y);
                if(px != py)
                {
                    f[px] = py;
                    ans+=a[i].d;
                }
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    Kruskal
  • 相关阅读:
    "etc/profile" E212: Can't open file for writing
    Swift 判断是否是调试模式以及是否越狱
    密码技术之基本介绍
    算法
    App Thinning (App 瘦身)
    #pragma once vs #ifndef
    APUE学习之进程控制
    Socket编程-基础使用
    Link Script 学习
    PX4学习之-uORB msg 自动生成模板解读
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4679373.html
Copyright © 2011-2022 走看看