最小生成树模板

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int visited[105],map[105][105],lowcost[105],n,m;

int prime(int v)
{
    int i,j,minn,k,sum=0;
    for(i=1;i<=n;i++)
     lowcost[i]=map[v][i];
    visited[v]=1;
    for(i=2;i<=n;i++)
    {
        minn=100000000;
        for(j=1;j<=n;j++)
         if(lowcost[j]<minn&&visited[j]==0)
         {
             minn=lowcost[j];
             k=j;
         }
        sum=sum+minn;
        visited[k]=1;
        for(j=1;j<=n;j++)
         if(lowcost[j]>map[k][j]&&visited[j]==0)
          lowcost[j]=map[k][j];
    }
    return sum;
}

int main()
{
    int i,j,a,b;
    while(scanf("%d",&n)!=EOF)
    {
        memset(visited,0,sizeof(visited));
        for(i=1;i<=n;i++)
         for(j=1;j<=n;j++)
          scanf("%d",&map[i][j]);
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        {
            scanf("%d%d",&a,&b);
            map[a][b]=map[b][a]=0;
        }
        printf("%d\n",prime(1));
    }
    return 0;
}

 

posted on 2013-10-31 17:02  后端bug开发工程师  阅读(999)  评论(0编辑  收藏  举报

导航