图算法--最小生成树prim

思路类似于dijkstra,只不过松弛的时候略微不同,松弛成到已经确定的任一点的最短距离,而dijkstra则是松弛为到起点的最短距离

复制代码
 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=510,INF=0x3f3f3f3f;
 5 int n,m;
 6 int g[N][N];
 7 int dis[N];
 8 bool st[N];
 9 int prim(){
10     memset(dis,0x3f,sizeof dis);
11     dis[1]=0;
12     int res=0;
13     for(int i=0;i<n;i++){
14         int t=-1;
15         for(int j=1;j<=n;j++){
16             if(!st[j]&&(t==-1||dis[j]<dis[t])){
17                 t=j;
18             }
19         }
20         if(dis[t]==INF){
21             return INF;
22         }
23         st[t]=true;
24         res+=dis[t];
25         for(int j=1;j<=n;j++){
26             dis[j]=min(dis[j],g[t][j]);
27         }
28     }
29     return res;
30 }
31 int main(void){
32     memset(g,0x3f,sizeof g);
33     cin>>n>>m;
34     for(int i=0;i<m;i++){
35         int a,b,c;
36         cin>>a>>b>>c;
37         g[a][b]=g[b][a]=min(g[a][b],c);
38     }
39     int res=prim();
40     if(res==INF){
41         cout<<"impossible";
42     }else{
43         cout<<res;
44     }
45     return 0;
46 }
复制代码

 

posted on   greenofyu  阅读(106)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示