• Prim算法POJ1258


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

    这道题是最简单的一个啦,,,,

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 #include<algorithm>
     5 using namespace std;
     6 const int N=110;
     7 #define M 0x3f3f3f3f///设置无穷大的数M,当两点之间无法联通时设两者之间距离为M
     8 int ma[N][N],low[N],vis[N];///ma记录道路的长度,low记录最短的路径,vis判断是否经过这点
     9 int n;
    10 int prim(){
    11 int i,j,pos,mi,result=0;
    12 memset(vis,0,sizeof(vis));
    13 vis[1]=1;///从1开始遍历
    14 pos=1;///记录当前结点
    15 
    16 
    17 for(i=1;i<=n;i++)
    18     if(i!=pos)low[i]=ma[pos][i];///,初始时pos等于1,查找pos周围可以通过的结点中最短的距离并存储在low中
    19 
    20 
    21 for(i=1;i<n;i++){///遍历n-1次
    22     mi=M;
    23     for(j=1;j<=n;j++){
    24         if(vis[j]==0&&mi>low[j]){
    25             mi=low[j];
    26             pos=j;
    27 
    28         }
    29     }
    30     result+=mi;
    31     vis[pos]=1;
    32     for(j=1;j<=n;j++){///查找pos周围的最短的距离
    33         if(vis[j]==0&&low[j]>ma[pos][j])
    34             low[j]=ma[pos][j];
    35     }
    36 }
    37 return result;
    38 }
    39 int main()
    40 {
    41     int i,v,j,ans;
    42     while(~scanf("%d",&n)){
    43         memset(ma,M,sizeof(ma));
    44         for(i=1;i<=n;i++){
    45             for(j=1;j<=n;j++){
    46                 scanf("%d",&v);
    47                 ma[i][j]=ma[j][i]=v;
    48 
    49             }
    50         }
    51         ans=prim();
    52         cout<<ans<<endl;
    53     }
    54     return 0;
    55 }
    View Code
    你若盛开,清风自来...
  • 相关阅读:
    别折腾自己
    在线工具集合
    搜索新技能
    saml login的流程
    给学网 好网站
    drush .. drupal console
    地铁健身操
    js扩展符号
    for in | for in 比较 解释 | 以后找知识点先从这里面搜索
    grep 查找字符串 在文件或者文件夹中
  • 原文地址:https://www.cnblogs.com/shangjindexiaoqingnian/p/5831166.html
Copyright © 2020-2023  润新知