zoukankan      html  css  js  c++  java
  • Prim算法模板

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 using namespace std;
     5 const int N=1001;
     6 const int inf=1<<29;
     7 int w[N][N];
     8 int dis[N],flag[N];
     9 int n,m,u,v,c;
    10 int  prim()
    11 {
    12     int sum=0;//计算最小距离
    13     memset(flag,0,sizeof(flag));
    14     for(int i=1; i<=n; i++)
    15     {
    16         dis[i]=w[1][i];//把起点到每个点的距离付给dis
    17     }
    18     flag[1]=1;
    19     for(int i=1; i<n; i++)//会更新n-1次顶点,每个点都会做一次顶点
    20     {
    21         int to=-1,min1=inf;
    22         for(int j=1; j<=n; j++)//从起点开始找,求出各点到以找过的顶点的距离最小值
    23         {
    24             if(!flag[j]&&dis[j]<min1)//保证不是被使用过的顶点,重新算出此次循环的最小值
    25             {
    26                 to=j;//把最小值对应的点的下标记录下
    27                 min1=dis[j];
    28             }
    29         }
    30         if(to==-1) return -1;//有断点,不能到达
    31         sum+=min1;
    32         flag[to]=1;
    33         for(int j=1; j<=n; j++)
    34         {
    35             dis[j]=min(dis[j],w[to][j]);//更新顶点,其中存储着最短的目前找过的顶点与各点之间的距离
    36         }//这样方便以后可以直接找到与各点的最短距离,遇到回路也不怕!
    37     }
    38     return sum;
    39 
    40 }
    41 int main()
    42 {
    43     while(scanf("%d%d",&n,&m)!=EOF)//n个顶点,m条边
    44     {
    45         for(int i=1; i<=n; i++) //初始化i到j点的距离为无穷大,
    46         {
    47             for(int j=1; j<=n; j++)
    48             {
    49                 w[i][j]=inf;//i到j,j到i 都要人为的付成是一样的
    50             }
    51         }
    52         for(int i=0; i<m; i++)
    53         {
    54             scanf("%d%d%d",&u,&v,&c);//起点u,终点v,权值c
    55             w[u][v]=w[v][u]=c;
    56         }
    57         printf("%d
    ",prim());
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    CentOS yum 安装svn1.8
    js 替换掉汉字 和替换非汉字 比较时间JS
    PhpStorm 10 破解
    html中link的用法
    CSS3:nth-child()伪类选择器
    提示的小三角
    css 高度自适应
    <input type="file" />浏览时只显示指定文件类型
    MySQL查询表内重复记录
    扒站小工具
  • 原文地址:https://www.cnblogs.com/tianmin123/p/4765931.html
Copyright © 2011-2022 走看看