zoukankan      html  css  js  c++  java
  • Hdu 1301 prim算法 生成最小生成树

    小弟初学最小生成树算法,起初还是自己的几个队友教会了我思想,最小生成树说白了就是在一个图当中寻找出n-1条边使得n个结点都是连通的,但是边权值总和最小。

       Prim算法是通过不断寻找结点,找出当前所生成的树周围的边权值最小的一个边把这条边给纳入进来,然后通过纳入进来所引入的新的结点来更新现在整个树到达其他未进入到生成树中来的距离,使得每次总能纳入最小的边权值而引入新结点。

    具体代码如下:

    View Code
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h> 
     4 #define MaxSize 10000000
     5 using namespace std;
     6 int map[30][30]; 
     7 int main()
     8 {
     9    int n,m,w,visit[30],low[30];
    10    char start,end; 
    11    while(scanf("%d",&n)!=EOF&&n)
    12    { 
    13        memset(map,-1,sizeof(map));
    14        for(int i=0;i<n-1;i++)
    15        {
    16            getchar();
    17            scanf("%c",&start);
    18            scanf("%d",&m);
    19            for(int i=0;i<m;i++)
    20            {
    21               getchar();
    22               scanf("%c %d",&end,&w);
    23               map[start-64][end-64]=w;
    24               map[end-64][start-64]=w; 
    25            } 
    26        }   
    27        memset(visit,0,sizeof(visit));
    28        int pos=1,result=0;
    29        visit[1]=1;
    30        for(int i=1;i<=n;i++)
    31        {
    32           low[i]=map[pos][i]; //随便需找其中一个点,将整个点作为起始生成树,并将该起始生成树到每个点的距离赋进去。
    33        }
    34        for(int i=0;i<n-1;i++)//接下来只要找到剩下的n-1个点
    35        {
    36             int valueMin=MaxSize;
    37             for(int j=1;j<=n;j++)
    38             {
    39               if(!visit[j]&&low[j]!=-1&&low[j]<valueMin)
    40               {
    41                  valueMin=low[j];
    42                  pos=j;//每次都寻找要纳入进来的边的位置
    43               }
    44             }
    45             result+=valueMin;
    46             visit[pos]=1;
    47             for(int j=1;j<=n;j++)
    48             {
    49               if(!visit[j]&&(map[pos][j]<low[j]||low[j]==-1)&&map[pos][j]!=-1)
    50               {
    51                  low[j]=map[pos][j];
    52               }  
    53             }
    54       }
    55        printf("%d\n",result);
    56    } 
    57    return 0;    
    58 } 
  • 相关阅读:
    Office Shared-Addin : Favorite的下载、安装和使用(2020.2.22)
    VBA编程常用词汇英汉对照表
    Excel-DNA自定义函数的参数智能提示功能:ExcelDna.IntelliSense1.1.0.rar
    VSTO开发中级教程 配套资源下载
    TreeviewEditor.rar
    FaceIDViewer.rar
    imageMso7345.rar
    VisualStudioAddin2016Setup.rar
    VBE2014_Setup_20160709.rar
    documen.write 和 innerHTML 的区别?
  • 原文地址:https://www.cnblogs.com/nuoyan2010/p/2667115.html
Copyright © 2011-2022 走看看