最小生成树算法 prim算法
2014-06-07 10:53
197 查看
最小生成树是数据结构中图的一种重要应用,它的要求是从一个带权无向完全图中选择n-1条边并使这个图仍然连通(也即得到了一棵生成树),
同时还要考虑使树的权最小。 prim算法就是一种最小生成树算法。
普里姆算法的基本思想:
从连通网N={V,E}中的某一顶点U0出发,选择与它关联的具有最小权值的边(U0,v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合U中。如此继续下去,直到网中的所有顶点都加入到生成树顶点集合U中为止。
下面举例说明下prim算法:
例题:poj 2485
#include <iostream>
using namespace std;
#define INF 70000
int N;//点的数目
int key[500];
bool flag[500];
int A[500][500];
int Prim(int r)
{
int result=0;
for(int i=0;i<N;i++)
{
key[i]=INF;
flag[i]=true;
}
key[r]=0;
for(int i=0;i<N;i++)
{
int min_num=INF;
int min;
for(int j=0;j<N;j++)
{
if(flag[j] && min_num>key[j])
{
min_num=key[j];
min=j;
}
}
flag[min]=false;
if(result<key[min])
result=key[min];
for(int j=0;j<N;j++)
{
if(flag[j] && A[min][j] < key[j])
key[j]=A[min][j];
}
}
return result;
}
int main()
{
int T;
cin >> T;
while(T--)
{
cin >> N;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
scanf("%d",&A[i][j]);
}
cout << Prim(0) << endl;
}
}
同时还要考虑使树的权最小。 prim算法就是一种最小生成树算法。
普里姆算法的基本思想:
从连通网N={V,E}中的某一顶点U0出发,选择与它关联的具有最小权值的边(U0,v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合U中。如此继续下去,直到网中的所有顶点都加入到生成树顶点集合U中为止。
下面举例说明下prim算法:
例题:poj 2485
#include <iostream>
using namespace std;
#define INF 70000
int N;//点的数目
int key[500];
bool flag[500];
int A[500][500];
int Prim(int r)
{
int result=0;
for(int i=0;i<N;i++)
{
key[i]=INF;
flag[i]=true;
}
key[r]=0;
for(int i=0;i<N;i++)
{
int min_num=INF;
int min;
for(int j=0;j<N;j++)
{
if(flag[j] && min_num>key[j])
{
min_num=key[j];
min=j;
}
}
flag[min]=false;
if(result<key[min])
result=key[min];
for(int j=0;j<N;j++)
{
if(flag[j] && A[min][j] < key[j])
key[j]=A[min][j];
}
}
return result;
}
int main()
{
int T;
cin >> T;
while(T--)
{
cin >> N;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
scanf("%d",&A[i][j]);
}
cout << Prim(0) << endl;
}
}
相关文章推荐
- 一步一步复习数据结构和算法基础-prim算法(最小生成树)
- 最小生成树算法(类Prim算法的笨办法)
- 图基本算法 最小生成树 Prim算法(邻接表/邻接矩阵+优先队列STL)
- 十二、图的算法入门--(2)最小生成树---Prim算法实现
- 【算法导论】最小生成树(prim算法)
- 算法java实现--贪心算法--最小生成树问题--Prim算法
- 最小生成树算法之Prim算法
- 浅谈最小生成树的算法思路(一)Prim算法
- 构造最小生成树的算法——Prim算法
- 最小生成树算法(类Prim算法的笨办法)
- 求解最小生成树的算法 prim算法(附模板)
- hdu 1233 还是畅通工程(最小生成树的Prim和Kruskal两种算法的c++实现)(prim算法详解)
- 图论中最小生成树构造算法之Prim算法和Kruskal算法
- 最小生成树算法---普里姆Prim算法
- 最小生成树算法---普里姆Prim算法
- 无向图的最小生成树算法的C程序实现代码(Prim算法)
- 【算法导论】最小生成树(prim算法)
- 最小生成树算法-Prim算法
- 最小生成树算法之Prim算法
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)