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

猜你喜欢

转载自www.cnblogs.com/wangxuelin/p/9029203.html