POJ 1258 Agri-Net(最小生成树Prim算法)
2016-08-17 11:18
465 查看
// // main.cpp // Richard // // Created by 邵金杰 on 16/8/17. // Copyright © 2016年 邵金杰. All rights reserved. // #include<iostream> #include<cstdio> #include<vector> #include<queue> #include<algorithm> #include<cstring> using namespace std; struct edge{ int v,w; edge(int v,int w): v(v),w(w) {} bool operator < (const edge p) const { return w>p.w; } }; const int INF=100000000; int vis[110],dist[110]; vector<vector<edge> > G(110); int HeapPrime(int n) { memset(vis,0,sizeof(vis)); priority_queue<edge> pq; for(int i=0;i<n;i++) dist[i]=INF; pq.push(edge(0,0)); int nCount=0; int mindist=0; while(nCount<n&&!pq.empty()) { edge nd(0,0); do{ nd=pq.top();pq.pop(); }while(vis[nd.v]==1&&!pq.empty()); if(vis[nd.v]==0) { vis[nd.v]=1; nCount++; mindist+=nd.w; for(int i=0;i<G[nd.v].size();i++) { int v=G[nd.v][i].v; if(vis[v]==0) { int w=G[nd.v][i].w; if(dist[v]>w){ dist[v]=w; pq.push(edge(v,w)); } } } } } if(nCount<n) return -1; return mindist; } int main() { int n,w; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) G[i].clear(); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%d",&w); G[i].push_back(edge(j,w)); } } printf("%d\n",HeapPrime(n)); } return 0; }
相关文章推荐
- POJ 1258 Agri-Net(最小生成树prim算法)
- 最小生成树问题·POJ-1258 Agri-Net·prim算法
- POJ 1258 Agri-Net 图论 prim算法 最小生成树
- 【最小生成树之prim算法】POJ-1258---Agri-Net
- POJ1258 Agri-Net(最小生成树,prim算法)
- POJ 1258 Agri-Net 最小生成树 Prim算法
- 最小生成树之Prim算法---POJ1258---Agri-Net
- poj-1258 Agri-Net(最小生成树 Prim算法)
- POJ 1258 Agri-Net 最小生成树 Prim算法
- POJ 1258 Agri-Net(最小生成树Prim算法)
- POJ1258,Agri-Net,明显的最小生成树
- Agri-Net - POJ 1258 最小生成树
- poj 1258 Agri-Net 最小生成树 kruskal
- Poj1258_Agri-Net(最小生成树)
- Poj1258_Agri-Net(最小生成树)
- Poj1258_Agri-Net(最小生成树)
- poj 1258 Agri-Net(最小生成树)
- POJ 1258 Agri-Net 最小生成树(Kruskal算法入门)
- POJ 1258 Agri-Net 【最小生成树】
- POJ 1258 Agri-Net (最小生成树入门题目)