• poj 1258 Agri-Net prim模板 prim与dijkstra的区别


    很裸地求最小生成树的题目。题意就不多说了,最重要的就是记录一下学会了prim算法。

    初学prim,给我的第一感觉就是和dijkstra好像啊,感觉两者的区别还是有的:

    1:prim是求最小生成树的算法。

      dijkstra是求最短路的算法。

    2:prim中dis保存的是未加入集合的点,加入集合需要的代价,而已经加入集合中的点加入花费代价是其他变量保存的。

      dijkstra中dis保存的是从起点到当前点所花费的最小代价。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <iostream>
     7 using namespace std;
     8 
     9 const int INF = 0x3f3f3f3f;
    10 const int maxn = 105;
    11 //map记录路径,vis记录是否加入集合,dis记录未加入集合的点与集合的最短距离
    12 int map[maxn][maxn], vis[maxn], dis[maxn], n;
    13 
    14 int prim ()
    15 {
    16     int i, sum;
    17     memset(vis, 0, sizeof(vis));//标记所有的点都在集合外
    18     sum = 0;//总花费记为0
    19     vis[1] = 1;//把1当成起始集合
    20     for (i=2; i<=n; i++)//初始化dis
    21         dis[i] = map[1][i];
    22     for (int j=1; j<n; j++)
    23     {//因为已经加入集合了一个点,所以只需循环n-1次
    24         int min = INF, index;
    25         for (i=1; i<=n; i++)//寻找加入集合的最优点
    26             if (!vis[i] && dis[i]<min)
    27             {
    28                 min = dis[i];
    29                 index = i;
    30             }
    31             sum += min;//把最优点加入集合
    32             vis[index] = 1;
    33          for (i=1; i<=n; i++)//对未加入集合的点加入到集合所用的花费进行优化
    34                 if (!vis[i] && dis[i]>map[index][i])
    35                 dis[i] = map[index][i];
    36     }
    37     return sum;
    38 }
    39 int main ()
    40 {
    41     int s;
    42     while (scanf ("%d", &n)!= EOF)
    43     {
    44         for (int i=1; i<=n; i++)
    45             for (int j=1; j<=n; j++)
    46             {
    47                 scanf ("%d", &s);
    48                 map[i][j] = s;
    49             }
    50         printf ("%d
    ", prim ());
    51     }
    52     return 0;
    53 }
    本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    Python数据分析与机器学习-Matplot_2
    Python数据分析与机器学习-Matplot_1
    1008. 数组元素循环右移问题 (20)
    Latex小技巧
    执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误
    Linux使用MentoHust联网线上校园网, 回到普通有线网络却连不上?
    Re:uxul
    Linux下nautilus的右键快捷菜单项设置
    从入门到入狱——搭讪技巧
    Latex命令
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/4326346.html
Copyright © 2020-2023  润新知