zoukankan      html  css  js  c++  java
  • 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;
    } 
       
  • 相关阅读:
    windows 快捷键
    MySQLorder by用法
    Idea-2020.1.3破解
    Java-FTP上传下载
    Java-byte转换
    Java-执行shell命令
    Java-文件加密传输(摘要+签名)
    AmazonRekognition-Java对接
    Java-File转MultipartFile
    AmazonS3-Java对接
  • 原文地址:https://www.cnblogs.com/NaCl/p/4859638.html
Copyright © 2011-2022 走看看