poj1258Agri-Net

来源:互联网 发布:房产拍卖淘宝司法拍卖 编辑:程序博客网 时间:2024/04/30 09:51

简单的最小生成树,直接prim

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define MAX 0x3f3f3f3fint nodenum;int map[110][110];int lowcost[110];int sum;bool visit[110];void prim(){    int temp,k;    memset(visit,false,sizeof(visit));    visit[1]=true;    for(int i=1;i<=nodenum;i++)        lowcost[i]=map[1][i];        sum=0;    for(int i=1;i<=nodenum;i++)    {        temp=MAX;        for(int j=2;j<=nodenum;j++)            if(!visit[j]&&temp>lowcost[j])            temp=lowcost[k=j];        if(temp==MAX)            break;        visit[k]=true;        sum=sum+temp;        for(int j=1;j<=nodenum;j++)            if(!visit[j]&&lowcost[j]>map[k][j])            lowcost[j]=map[k][j];    }}int main(){    while(scanf("%d",&nodenum)!=EOF)    {        memset(map,MAX,sizeof(MAX));        for(int i=1;i<=nodenum;i++)            for(int j=1;j<=nodenum;j++)            scanf("%d",&map[i][j]);            prim();            printf("%d\n",sum);    }    return 0;}


0 0
原创粉丝点击