prim
Posted wangxuelin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了prim相关的知识,希望对你有一定的参考价值。
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <algorithm> 5 #include <stack> 6 #include <cstring> 7 #include <queue> 8 using namespace std; 9 10 const int maxn=100; 11 int dis[maxn]; 12 const int INF=0x3f3f3f3f; 13 int c[maxn][maxn]; 14 int close[maxn]; 15 int n,m; 16 17 void init() 18 { 19 for(int i=1;i<=n;i++) 20 for(int j=1;j<=n;j++) 21 c[i][j]=INF; 22 for(int i=1;i<=n;i++) 23 { 24 dis[i]=INF; 25 c[i][i]=0; 26 } 27 } 28 29 30 void prim(int v) 31 { 32 int vis[maxn]; 33 memset(vis,0,sizeof(vis)); 34 for(int i=1;i<=n;i++) 35 { 36 dis[i]=c[v][i]; 37 close[i]=v; 38 } 39 40 vis[v]=1; 41 for(int len=1;len<n;len++) 42 { 43 int min=INF; 44 int minn=v; 45 for(int i=1;i<=n;i++) 46 { 47 if(vis[i]==0 && dis[i]<min) 48 { 49 min=dis[i]; 50 minn=i; 51 } 52 } 53 54 vis[minn]=1; 55 cout<<minn<<"-"<<close[minn]<<endl; 56 57 for(int i=1;i<=n;i++) 58 { 59 if(vis[i]==0 && c[i][minn]<dis[i]) 60 { 61 dis[i]=c[i][minn]; 62 close[i]=minn; 63 } 64 } 65 } 66 67 } 68 69 int main() 70 { 71 cin>>n>>m; 72 int a,b,cc; 73 init(); 74 for(int i=0;i<m;i++) 75 { 76 cin>>a>>b>>cc; 77 c[a][b]=cc; 78 c[b][a]=cc; 79 } 80 prim(1); 81 return 0; 82 }
示例输入:
5 7
1 2 10
1 5 100
2 3 50
4 5 60
4 3 20
1 4 30
3 5 10
示例输出:
2-1
4-1
3-4
5-3
以上是关于prim的主要内容,如果未能解决你的问题,请参考以下文章