也许可以的prim

poj - 1258

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f; 
int mapp[1005][1005];
int n;
int sum;
int lowcast[1005];
int nearvex[1005];
void prim()
{
    sum=0;
    for(int i=1;i<=n;i++)
    {
        lowcast[i]=mapp[1][i];
        nearvex[i]=1;
    }
    nearvex[1]=-1;
    for(int i=1;i<n;i++)
    {   int min=INF;
        int v=-1;
        for(int j=1;j<=n;j++)
        {
            if(nearvex[j]!=-1&&min>lowcast[j])
            {
                min=lowcast[j];
                v=j;
            }
        }
            nearvex[v]=-1;
            sum=sum+lowcast[v];
        //  printf("sum=%d\n",sum);
            for(int j=1;j<=n;j++)
            {
                if(nearvex[j]!=-1&&mapp[v][j]<lowcast[j])
                {
                   lowcast[j]=mapp[v][j];
                   nearvex[j]=v;             //还行没用。。。。
                }   
            }
        
    }
        printf("%d\n",sum); 
}
int main()
{
  while(scanf("%d",&n)!=EOF)
  {
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            
            {
                scanf("%d",&mapp[i][j]);
            } 
        }
    }
    prim();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容