POJ 1258 Prim最小生成树

来源:互联网 发布:软件代理平台 编辑:程序博客网 时间:2024/05/18 17:59

最小生成树,密集图,话不多说,直接上Prim。

#include <iostream>#include <cmath>#include <cstdio>#include <string>#include <vector>#include <cstdlib>#include <algorithm>#include <stack>#include <queue>#include <list>#include <set>#include <map>#include <climits>using namespace std;typedef long long ll;int n,distan[101][101];bool visited[101];struct Node{    int n,dis;    Node(int n0,int dis0):n(n0),dis(dis0){}    bool operator<(const Node &a)const{return dis>a.dis;}};void init(){    memset(visited,0,sizeof visited);    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)            scanf("%d",&distan[i][j]);}void prim(){    priority_queue<Node> que;    que.push(Node(1,0));    int ans=0;    for(int i=1;i<=n;){        Node top=que.top();        que.pop();        if(visited[top.n]){continue;}        visited[top.n]=1;        ans+=top.dis;        for(int j=1;j<=n;j++){            if(!visited[j])                que.push(Node(j,distan[j][top.n]));        }        i++;    }    cout<<ans<<endl;}int main(){    while(cin>>n){        init();        prim();    }    return 0;;}
0 0
原创粉丝点击