• prim算法


    prim算法是构造最小生成树的一种算法= =个人觉得写起来没有克鲁斯卡尔那么优美

    首先我们用个二维数组G[N][N]来保存权值,用low[N]数组来保存最小权值,vis[N]来保存是否已经添加到MTS中

    然后结合poj1258实现prim算法

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    const int inf=2500000;
    int G[555][555]; 
    int x[555],y[555];
    int low[555]; 
    int vis[555];
    int n; 
    void prim()
    {
        memset(vis,0,sizeof(vis));
        int pos=1;//先选定一个点,然后由这个点出发逐步构造MTS 
        int min;
        long long ans=0;
        vis[1]=1;
        for(int i=1;i<=n;i++)//给low数组初次赋值 
        low[i]=G[pos][i];
        for(int i=1;i<n;i++)//还有n-1个点要归纳进去 
        {
            min=inf;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j]&&low[j]<min)//寻找最小的权值 
                {
                    min=low[j];
                    pos=j;
                }
            }
            vis[pos]=1;
            ans+=min;
            for(int j=1;j<=n;j++)//由新选定的点出发,更新最小权值 
            {
                if(!vis[j]&&low[j]>G[pos][j])
                low[j]=G[pos][j];
            }
        } 
        printf("%I64d
    ",ans);
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    scanf("%d",&G[i][j]);
                }
            }
            prim();
        }
        return 0;
    } 
       
  • 相关阅读:
    安卓9.0内测的背后,是上万App开发者半年来的适配优化
    错误记录:vue跟vue编译器版本不一致
    jspdf简单使用
    vue input添加回车触发
    vue watch bug记录
    SecureCRT通过拷贝配置文件登陆
    仿射变换
    opencv图像的旋转
    图像旋转的原理
    CvScalar
  • 原文地址:https://www.cnblogs.com/NaCl/p/4859638.html
Copyright © 2020-2023  润新知