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

    Prim算法,代码核心在于一个双重循环,所以算法时间复杂度为O(n*n)。

    该算法与图中的边数无关。

    适用于计算边稠密的最小生成树。

    Prim算法采用贪心,不同于Kruskal算法的地方是,Prim算法筛选节点,找到下一条权最小的路。而Kruskal算法筛选权,来连接节点。

    ///     Prim
    
    bool Prim(int n) {
        memset(vis,0,sizeof(vis));      ///初始化每条路没走过
    
        
        ///初始化到每个点的权为inf,第一次更新dis时,才会将邻接矩阵存入dis
        for(int i=1; i<=n; i++) {
            dis[i]=inf;
        }
    
        ans=0;
        dis[1]=0;
    
        ///处理每个点,加入到集合中去
        for(int i=1; i<=n; i++) {
            int tmp=inf,k=0;
    
            for(int j=1; j<=n; j++) {       ///找每个点,找到最小的权
                if(!vis[j]&&dis[j]<tmp) {
                    tmp=dis[j];
                    k=j;                    ///找到节点
                }
            }
    
            if(tmp==inf) return false;
    
            vis[k]=true;
            ans+=tmp;
            
            ///更新最小权
            for(int j=1; j<=n; j++) {
                if(!vis[j]&&dis[j]>a[k][j]) {
                    dis[j]=a[k][j];
                }
            }
        }
        
        return true;
    }
    View Code
  • 相关阅读:
    xhr
    原生js的博客
    webstorm调试Node的时候配置
    multiparty
    bluebird
    Nodejs+express+angularjs+mongodb
    mustache.js
    ModelProxy 前端接口配置建模框架
    浏览器跨域访问解决方案
    前端性能优化补充篇
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5384523.html
Copyright © 2011-2022 走看看