PKU 1251 1258 2485 最小生成树PRIME

算法


普里姆:O(n*2) ,与图中边数无关,该算法适合于稠密图.
1)设最小生成树T的V(T)和E(T)均为空。
(2)从顶点集V(G)中任取一顶点加到顶点集V(T)中。                      
(3)在与V(T)中各顶点相关联的所有边中,取一条权值最小的边(Vi,Vj)其中,Vi包含于V(T),Vj含于 V(T)。                                   
(4)将边(Vi,Vj)加入到E(T)中,将顶点Vj到入到V(T)中.(5)若V(T)已满n个顶点,则算法终止,否则转步骤(3)。都是很典型很容易AC的
在这里挑一个最典型的题目贴上代码

/**********************
Author: WHU_Victordu
Created Time: 2008-1-2
File Name: pku1258.cpp
  Description: 
   **************************/

#include <stdio.h>
#define MAXNUM 100000

int dis[101][101],low[101];

int main()
{
    int n,i,j,min,k,sum;
 
    while(scanf("%d",&n)!=EOF)
    {
         sum=0;     
       for(i=0;i<n;i++)
         for(j=0;j<n;j++)
         scanf("%d",&dis[i][j]);
      
       for(i=0;i<n;i++)
       low[i]=dis[0][i];
   
      low[0]=0;
     
      for(i=1;i<n;i++)
      {
        min=MAXNUM;
        j=k=1;
       
        while(j<n)
        {
          if(low[j]&&low[j]<min)
          {
            min=low[j];
            k=j;
          }
          j++;
        }
       
        sum+=low[k];
       
        low[k]=0;
       
        for(j=1;j<n;j++)
        {
          if(dis[k][j]<low[j])
          low[j]=dis[k][j];
        }
        
      }
     
      printf("%d\n",sum);
     
    }
}

posted on 2008-01-02 23:36 Victordu 阅读(1403) 评论(1)  编辑 收藏 引用

评论

# re: PKU 1251 1258 2485 最小生成树PRIME 2008-03-06 20:05 UltramanZHY

...您拼错单词了...
PRIME是素数的意思...PRIM才是MST的一种算法...  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

常用链接

留言簿(5)

随笔档案(46)

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜