图论之prim算法

来源:互联网 发布:个人数字图书馆软件2.1 编辑:程序博客网 时间:2024/05/18 06:26
  • prim算法是用来求最小生成树de,复杂度为o(n2),与dij差不多,不过dis的代表意义不同,同时注意kruskal算法的复杂度是eloge(e是边数),稀疏图kruskal算法好,稠密图prim算法好
  1. dis【i】意义为i点到最小树的最小距离,而dij算法中的dis【i】表示i到源点的距离
  2. pic【i】【j】表示i点到j点的距离
  3. vis【】=0表示在U集合,1表示在s集合
  4. 核心代码:
  5. #define inf 999999999void prime(){    int sign,sum=0;    for(i=1;i<=n;i++)    {        vis[i]=0;        dis[i]=inf;    }    dis[1]=0;//起始点赋为0    for(i=1;i<=n;i++)    {        int mm=inf;        for(j=1;j<=n;j++)        {            if(vis[j]==0&&dis[j]<=mm)//找到离树距离最小的点            {                mm=dis[j];                sign=j;            }        }        vis[sign]=1;        sum+=dis[sign];//最小和的叠加        for(j=1;j<=n;j++)        {            if(vis[j]==0&&dis[j]>pic[sign][j])//更新【j】到树的最小距离                dis[j]=pic[sign][j];        }    }}


0 0
原创粉丝点击