图论基本算法2之最小生成树(prim算法)

来源:互联网 发布:易语言软件更新源码 编辑:程序博客网 时间:2024/06/08 18:43

prim算法是具有动态规划思想的最小生成树算法,在NOIP中十分重要;

参考代码:

<span style="font-size:18px;">#include<iostream>#include<algorithm>using namespace std;const int N=10005;int g[N][N],n,closedge[N],ans(0);int min(){int k,min=0x7fffff;for (int i=0;i<n;i++)  if (closedge[i]&&closedge[i]<min){  min=closedge[i];  k=i;  }return k;}void mst(int x){for (int i=0;i<n;i++) closedge[i]=g[x][i];int v;for (int i=1;i<n;i++){v=min();ans+=closedge[v];closedge[v]=0;for (int j=0;j<n;j++)if (closedge[j]&&g[v][j]<closedge[j])    closedge[j]=g[v][j];}}int main(){int m;cin>>n>>m;memset(g,0x7f,sizeof(g));for (int i=0;i<n;i++) g[i][i]=0;for (int i=0,begin,end,wei;i<m;i++){cin>>begin>>end>>wei;g[begin][end]=g[end][begin]=wei;}mst(0);cout<<ans<<endl;return 0;}</span>
注意代码中并没有考虑无法生成树的情况,考虑这种情况时只需在mst函数中加一个变量num在ans前后统计节点数,然后与总结点数比较即可。


0 0
原创粉丝点击