POJ 1258 Agri-Net Prim算法模型

題目鏈接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/I

題意:求連通的最小fiber,就是MST的敘述。


由於是以表格的形式給出,所以用Prim比較方便,當然用Kruskal也不麻煩。

代碼:

#include<iostream>
#include<cstdio>
#include<cstring>
#define INF 0x7fffffff

using namespace std;

int Map[110][110],dis[110],vis[110];
int N;

void prim(){
    for(int i=0;i<=N;i++) dis[i]=Map[1][i];
    memset(vis,0,sizeof(vis));
    int sum=0;vis[1]=1;
    for(int p=1;p<=N-1;p++){
        int Min=INF,t;
        for(int i=1;i<=N;i++) if(!vis[i] && dis[i]<Min)
            Min=dis[t=i];
        vis[t]=1;sum+=Min;
        for(int i=1;i<=N;i++) if(!vis[i] && dis[i]>Map[t][i])
            dis[i]=Map[t][i];
    }
    cout<<sum<<endl;
}

int main(){
    //freopen("D:\\in.txt","r",stdin);
    while(cin>>N){
        for(int i=1;i<=N;i++) for(int j=1;j<=N;j++)
            scanf("%d",&Map[i][j]);
        prim();
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章