最小生成树(一)....Prme算法
来源:互联网 发布:淘宝风筝 编辑:程序博客网 时间:2024/06/05 19:16
Prime 算法
简单定义一下Prime算法 Prime算法其实是不断的想一个集合(设为S)里加点。 最开始这个集合S里只有一个点,然后寻找集合S中的点与剩下点之间最短的边,加入这个集合,然后再找最短边,直到S有n个点
/*
typedef struct{
int flag,len;
}CloseEdge;
上述结构体定义了MST集合与剩下点之间的距离
算法:
init(CloseEdge); //初始化CloseEdge,即选一个点为开始点(记为V0),然后flag = 0 表示这个点在集合里,len为V0到其的距离
for(int cnt=0;cnt<n-1;++cnt){ //当集合S有n个点时结束,开始时已有一个,所以只需n-1次循环
int m_pos = Find_min(CloseEdge); //寻找集合与剩下点之间的最短边,即CloseEdge中的最小值
CloseEdge[m_pos].flag = 0; // 将找到的点标记为已在集合中
Update(CloseEdge); //跟新CloseEdge,由于新加了点,所以最短边可能变化。
}
*/
下面是Code,如有错误,欢迎指正。。
/* Prime算法 typedef struct{ int flag,len; //flag sign whether the Edge is in the M_Tree. len is the minimun length from M_Tree to the rest vertexs.}CloseEdge;init(CloseEdge); //initialization. All the flags equal 1 that denotes the edge isn't in the set. for(int cnt=0;cnt<n-1;++cnt){int m_pos = Find_min(CloseEdge);CloseEdge[m_pos].flag = 0;Update(CloseEdge);}*/#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define MAX 200 // denote the maximun number of the vertexs#define INF ~(1<<31)struct CloseEdge{ int x,y,len,flag;};CloseEdge E[MAX];int len=0,ans=0,g[MAX][MAX];void init(CloseEdge *E,int n);int Find_min(CloseEdge *E,int n);void Update(CloseEdge *E,int n,int pos);void initG(int n){ for(int i=0;i<n;++i) for(int j=0;j<n;++j) g[i][j] = INF;}int main(){ int n; while(cin>>n){ initG(n); for(int i=0;i<n;++i) for(int j=0;j<n;++j) cin>>g[i][j]; init(E,n); for(int j=0;j<n-1;++j){ int m_pos = Find_min(E,n); ans += E[m_pos].len; E[m_pos].flag = 0 , E[m_pos].len = 0; Update(E,n,m_pos); } cout<<ans<<endl; } return 0;}void init(CloseEdge *E,int n){ E[0].flag = 0,E[0].len=0; for(int i=1;i<n;++i){ E[i].flag = 1; E[i].len = g[0][i]; }}int Find_min(CloseEdge *E,int n){ int min_len = INF, m_pos = 0; for(int i=1;i<n;++i){ if(E[i].flag && E[i].len < min_len){ min_len = E[i].len; m_pos = i; } } return m_pos;}void Update(CloseEdge *E,int n,int pos){ for(int i=1;i<n;++i){ if(E[i].flag && g[i][pos] < E[i].len) E[i].len = g[i][pos]; }}
- 最小生成树(一)....Prme算法
- 算法复习(一)——最小生成树
- 图的最小生成树(一)—Kruskal算法
- 算法导论中的最小生成树(一)
- hiho最小生成树一(prim)算法
- 最小生成树(一)-----Prim算法
- 最小生成树(一)
- 最小生成树(一)
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 最小生成树算法
- 1098. Insertion or Heap Sort
- 工厂方法模式
- 据说是1984年理科高考数学附加题
- AngularJs directive指令详解
- 用 Scrapy+Mariadb 实现汉典数据爬虫(二)——Scrapy简单介绍
- 最小生成树(一)....Prme算法
- Maven 版本对应的 JDK 版本
- 51nod 1770 数数字
- hibernate 和jdbc
- 经典手眼标定算法之Tsai-Lenz的OpenCV实现
- 染纱厂ERP系统截图(2)
- php小总结
- ubuntu 12.04 LTS 如何使用更快的更新源
- 创建,删除,显示数据库