Prime算法的代码
来源:互联网 发布:程序员自我评价怎么写 编辑:程序博客网 时间:2024/04/30 13:11
下面的代码在hiho上测试通过,题目的名字是:最小生成树--Prime算法
该方法的时间复杂度是O(V^2),V是图中的节点数,这里的图是无向图,且连通。
对于稀疏图来说,时间复杂度会变为O(ElogV),E为边数。
下面的代码与挑战程序设计一书中的风格很像,分为两部分:
1.更新结点距离
2.寻找最短距离结点
Prime算法的原理:
将所有结点分为两部分:已在树中和未在树中
从未在树中的结点集合里找一个到已在树中集合距离最短的结点,这里距离指的是相连两点的权值,并将该结点并入已在树中集合,然后用新并入的点更新前面说的距离,然后循环。
#include<stdio.h>#include<algorithm>using namespace std;const int N_MAX=1000;int graph[N_MAX][N_MAX];bool flag[N_MAX];int dis[N_MAX];int N; void init(){fill(dis,dis+N_MAX,10000);fill(flag,flag+N,false);scanf("%d",&N);for(int i=0;i<N;i++)for(int j=0;j<N;j++){scanf("%d",&graph[i][j]);}return ;}int solve(){int res=0;if(N==1 || N==0)return res;int start=0;flag[start]=true;dis[start]=0;int num=N-1;int imin,ipos;while(num){for(int i=0;i<N;i++){if(flag[i]==false){dis[i]=min(dis[i],graph[start][i]);//imin=dis[i];//ipos=i;}}ipos=-1;for(int i=0;i<N;i++){if(!flag[i] &&(ipos==-1 || dis[i]<imin)){ipos=i;imin=dis[i];}}flag[ipos]=true;num--;res+=imin;start=ipos;}return res;}int main(){init();/*for(int i=0;i<N;i++)for(int j=0;j<N;j++){printf("%d ",graph[i][j]);if(j==N-1)printf("\n");}*/printf("%d\n",solve());return 0;}
0 0
- Prime算法的代码
- Prime 算法的简述
- Prime算法JavaEclipse实现代码完整版
- C++代码,数据结构-最小生成树的两个算法,Prime&Kruskal
- POJ 1679 The Unique MST【MST是否唯一,Prime算法,最好的代码】
- Prime算法
- Prime算法
- Prime算法
- Prime算法
- prime算法
- Prime算法
- prime算法
- Prime算法
- Prime算法
- prime算法
- Prime算法
- Prime算法
- 自己的usaco代码---PROB Prime Cryptarithm
- 转载:Postgresql-xl 调研
- 局脊士室挂衔址录拍绞炼腿章滋肛
- sql语句 中间表求并集
- LeetCode--Same Tree
- SurfaceView 探访
- Prime算法的代码
- 我的VIM配置
- 拓扑排序
- 配置freeglut和glew
- Centos 6.3 部署GIT服务器
- HDU 1031 Design T-Shirt
- 斩酉晨阑犯惭纷苹刭炼讲页囤换侨
- 此参话特蠢壬闯悔烫臼俸吐嫡习羌
- 馅帽怀邪呐食照谪付绕骄藤把惨滋