最小生成树之Prime算法(基于优先队列)
来源:互联网 发布:sql 注入 php 提权 编辑:程序博客网 时间:2024/06/16 06:46
#include <cstdio>#include <queue>#include <cstring>#define MAXN 1010#define mem(a,b) memset(a,b,sizeof(a))using namespace std;/* * Prme算法:贪心,适用于稠密图 * 时间复杂度:O(NlogN+M)*/struct node{ int v,dist; node(int v,int dist):v(v),dist(dist){} bool operator<(const node& b)const{ return dist>b.dist; }};int n, g[MAXN][MAXN],dis[MAXN];bool vis[MAXN];priority_queue<node> q;int Prime(int u){ int ans=0; mem(vis,false); while(!q.empty()) q.pop(); for(int i=1;i<=n;++i) if(i!=u){dis[i]=g[u][i]; q.push(node(i,dis[i]));} vis[u]=true; dis[u]=0; int cnt=1; while(!q.empty()){ node tmp=q.top(); q.pop(); u=tmp.v; if(vis[u]) continue; vis[u]=true; ans+=tmp.dist; cnt++; if(cnt>=n) break; for(int i=1;i<=n;++i) if(!vis[i]&&g[u][i]<dis[i]){ q.push(node(i,g[u][i])); dis[i]=g[u][i]; } } return ans;}int main(){ while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) scanf("%d",&g[i][j]); printf("%d\n",Prime(1)); } return 0;}
0 0
- 最小生成树之Prime算法(基于优先队列)
- 最小生成树之prim算法(优先队列优化)
- 最小生成树之Prim算法 优先队列版本
- 最小生成树之prime算法实现
- 最小生成树之prime算法
- C++ 最小生成树(优先队列)
- 最小生成树(prime算法)
- 最小生成树算法[Prime/(Kruskal)]
- prime算法(最小生成树模板)
- 最小生成树(prime算法)
- 图论入门(3):最小生成树之Prim算法(以及优先队列的bug修正)
- 最小生成树算法[prime]
- 最小生成树-prime算法
- 最小生成树 prime算法
- 最小生成树 prime算法
- 最小生成树Prime算法
- 最小生成树--Prime算法
- 最小生成树 Prime算法
- [最小割最大流]UVa1515 - Pool construction
- Linux补丁学习笔记
- 浅谈——定位的使用
- 题目:寻找缺失的数
- POJ 1064 Cable master (二分查找_经典题!!!)
- 最小生成树之Prime算法(基于优先队列)
- onLowMemory()与onTrimMemory()
- 编写struts.xml文件时提示帮助信息
- 浅谈——用宏封装单例
- 关于四边形各种形状的判断
- 极光推送基本写法
- Xcode插件
- 析构函数使用不当造成操作野指针程序coredump
- 终于搭建成功Xamarin for Android平台