POJ1258prime最小生成树
来源:互联网 发布:西门子plc软件tla 编辑:程序博客网 时间:2024/05/29 07:00
prime算法的模板题
给你村庄的距离矩阵,输出最小生成树的长
prime模板:
> int prim(int cost[][maxn],int n) {> int ans=0;> mem(vis);> vis[0]=true;> for(int i=1;i<n;i++)> {> low[i]=cost[0][i];> }> for(int i=1;i<n;i++)> {> int minn=inf;> int p=-1;> for(int j=0;j<n;j++)//注意查找最近的村庄> {> if(!vis[j]&&minn>low[j])> {> minn=low[j];//查找一个更近的后到后更新> p=j;> }> }> if(minn==inf)> return -1;> ans+=minn;> vis[p]=true;> for(int j=0;j<n;j++)//结束一轮查找后更新low数组> {> if(!vis[j]&&low[j]>cost[p][j])> low[j]=cost[p][j];> }> }> return ans; }
code:
#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>#include<iostream>#include<string>#include <set>using namespace std;#define ll long long#define mem(a) memset(a,0,sizeof(a))const int eps=1e-8;const int maxn=110;//须填写const int inf=0x3f3f3f3f;int vis[maxn];int low[maxn];int prim(int cost[][maxn],int n){ int ans=0; mem(vis); vis[0]=true; for(int i=1;i<n;i++) { low[i]=cost[0][i]; } for(int i=1;i<n;i++) { int minn=inf; int p=-1; for(int j=0;j<n;j++) { if(!vis[j]&&minn>low[j]) { minn=low[j]; p=j; } } if(minn==inf) return -1; ans+=minn; vis[p]=true; for(int j=0;j<n;j++) { if(!vis[j]&&low[j]>cost[p][j]) low[j]=cost[p][j]; } } return ans;}int main(){ int n; while(scanf("%d",&n)!=EOF&&n) { int map[maxn][maxn]; int result=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { scanf("%d",&map[i][j]); } result=prim(map,n); printf("%d\n",result); } return 0;}
0 0
- POJ1258prime最小生成树
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- PAT-A1097
- PAT-A1099
- 事件处理
- AR入门系列-在vuforia官网的使用-01-史上最详细AR入门教程
- 一致性哈希
- POJ1258prime最小生成树
- windows开发者的福音-cmder
- android反编译-smali语法
- tomcat 崩溃疑问笔记
- python-函数
- 七、[LeetCode OJ]Median of Two Sorted Arrays
- camel集成Jetty
- epoll模型
- 双链表实现