int prim()
{
    int sum=0;
    dis[1]=0;
    for(int i=1;i<=n;i++)
    {
        int pos,t=inf;
        for(int j=1;j<=n;j++)
        {
            if(hash[j]==0)
            {
                if(dis[j]<t)
                {
                    t=dis[j];
                    pos=j;
                }
            }
        }
        hash[pos]=1;
        if(pos==n) break;
        for(int j=1;j<=n;j++)
        {
            if(hash[j]==0)
            {
                if(map[pos][j]!=inf&&map[pos][j]<dis[j])
                   dis[j]=map[pos][j];
            }        
        }
    }
    for(int i=1;i<=n;i++)
    {
       sum+=dis[i];
    }
    return sum;//全省畅通的最小费用。 
}//最小生成树 
posted on 2011-07-20 09:20  枫叶飘泪  阅读(205)  评论(0编辑  收藏  举报