博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
prim(最小生成树模板)
阅读量:3953 次
发布时间:2019-05-24

本文共 1208 字,大约阅读时间需要 4 分钟。

描述

使用prim算法求某图的最小生成树的边的权值输出的序列。例如下图的最小生成树的权值输出序列为1 4 2 5 3,要求从V1顶点开始生成最小生成树。

输入

若干行整数

第一行为两个整数,分别为图的顶点数和边数
第二行开始是该图的邻接矩阵,主对角线统一用0表示,无直接路径的两点用100来表示(保证各边权值小于100)

输出

若干用空格隔开的整数

样例输入

6 10

0 6 1 5 100 100
6 0 5 100 3 100
1 5 0 5 6 4
5 100 5 0 100 2
100 3 6 100 0 6
100 100 4 2 6 0
样例输出

1 4 2 5 3

 

#include
#include
using namespace std;#define INF 0x3f3f3f3f#define ll long longconst int N=100000+100;const int M=3e6+1005;int w[2000][2000];//储存边int dist[2000];//保存到已选集合的最小权值bool vis[2000];//标记是否已经被选int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { cin>>w[i][j]; if(w[i][j]==100) w[i][j]=INF; } } for(int i=2;i<=n;++i)//初始化 { dist[i]=w[1][i]; } int x=1; vis[x]=1; for(int i=1;i
=dist[j]) { minn=dist[j]; k=j; } } cout<
<<' ';//输出权值 x=k; vis[x]=1;//标记已选 //cout<
<<" "; for(int j=1;j<=n;++j) {//更新到已选集合的权值 if(!vis[j]&&dist[j]>=w[x][j]) { dist[j]=w[x][j]; } } } return 0;}

 

转载地址:http://cpyzi.baihongyu.com/

你可能感兴趣的文章
SSM框架和SSH框架的区别
查看>>
Elasticsearch-基础介绍及索引原理分析
查看>>
过滤敏感词算法
查看>>
linux学习之shell脚本if判断参数-n,-d,-f等
查看>>
linux学习之windos文件在linux里面乱码解决
查看>>
idea快捷键
查看>>
linux学习之shell遍历数组
查看>>
python函数取参及默认参数使用
查看>>
linux学习之shell中的${},##, %% , :- ,:+, ? 的使用
查看>>
Spring学习之Filter、Interceptor、Aop实现与区别
查看>>
Spring 添加@Autowired注释, 注入对象却为空
查看>>
springSecurity学习
查看>>
通过Java的api操作redis
查看>>
jquery基本选择器
查看>>
linux学习之shell字符串大小写转换
查看>>
Linux下用base64对字符串进行加密解密
查看>>
H5走迷宫小游戏
查看>>
mysql建表 表名与关键字冲突
查看>>
mysql 创建单表外键关联多表
查看>>
postman使用
查看>>