zoukankan      html  css  js  c++  java
  • 图论——最小生成树_prim

    今天是最小生成树的prim的算法,因为本人水平有限所以堆优化都不是很会啊,但邻接表好像出了点小差错所以上邻接矩阵比较好一点,尽管比Kruskal慢了很多很多但这种贪心思想还是要学习的。从第一条边开始取然后进行取n-1条边取完即可于是每取一条边就进行来对其他的边进行更新这样找最小值。下面代码。

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<ctime>
    #include<cstdio>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<stack>
    #include<queue>
    #include<iomanip>
    using namespace std;
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,m;
    int a[5009][5009];
    int ans=0;
    int dis[5008];
    int vis[5008];
    void prim()
    {
        memset(vis,0,sizeof(vis));
        memset(dis,10,sizeof(dis));
        for(int i=1;i<=n;i++)
            dis[i]=a[1][i];
        vis[1]=1;
        dis[1]=0;
        for(int i=1;i<n;i++)
        {
            int minn=100000000,s=0;
            for(int j=1;j<=n;j++)
            {
                if(dis[j]<minn&&vis[j]==0)
                {
                    minn=dis[j];
                    s=j;
                }
            }
            ans+=minn;
            vis[s]=1;
            for(int j=1;j<=n;j++)
                if(a[s][j]<dis[j]&&vis[j]==0)
                    dis[j]=a[s][j];
        }
    }
    int main()
    {
        //freopen("1.in","r",stdin);
        n=read();m=read();
        memset(a,10,sizeof(a));
        for(int i=1;i<=m;i++)
        {
            int x,y,z;
            x=read();y=read();z=read();
            a[x][y]=a[y][x]=min(a[x][y],z);
        }
        prim();
        printf("%d
    ",ans);
        return 0;
    }
    View Code

    回首向来萧瑟处,归去,也无风雨也无晴。

  • 相关阅读:
    I.MX6 简单电路模拟USB设备的插入
    I.MX6 查看baudrate确定是否被其他程序占用
    I.MX6 Ethernet MAC (ENET) MAC Address hacking
    I.MX6 MAC Address 导致的系统崩溃
    I.MX6 U-boot编译找不到用户目录
    I.MX6 i2c_data_write_byte ioctl error: I/O error
    I.MX6 Android shutdown shell command
    Where Are You Standing?
    byte[]和InputStream的相互转换
    jsp 获取cookie 的值的方法
  • 原文地址:https://www.cnblogs.com/chdy/p/9672902.html
Copyright © 2011-2022 走看看