问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Python中prim算法或kruscal算法的实现

发布网友 发布时间:2022-04-20 20:25

我来回答

1个回答

热心网友 时间:2023-07-06 13:23

kruskal:
#include "stdio.h"
#include "stdlib.h"
#include "iostream"
using namespace std;
#define MAXE 100 //MAXE为最大的边数
struct edges
{
int bv,tv,w; //边集类型,存储一条边的起始顶点bv、终止顶点tv和权w
}edges;
typedef struct edges edgeset[MAXE];
//寻找v所在的连通集
int seeks(int set[],int v)
{
int i=v;
while (set[i]>0)

i=set[i];
return i;
}
void kruskal(edgeset ge,int n,int e)
{
int set[MAXE],v1,v2,i,j;
for(i=1;i<=n;i++)
set[i]=0;
i=1; //i表示待获取的生成树中的边数,初值为1
j=1; //j表示ge中的下标,初值为1
while(j<n&&i<=e)//按边权递增顺序,逐边检查该边是否应加入到生成树中
{
v1=seeks(set,ge[i].bv); //确定顶点v所在的连通集
v2=seeks(set,ge[i].tv);
cout<<ge[i].bv<<":"<<v1<<", "<<ge[i].tv<<":"<<v2<<endl;
if(v1!=v2) //当v1,v2不在同一顶点集合,确定该边应当选入生成树
{
cout<<"("<<ge[i].bv<<", "<<ge[i].tv<<") "<<ge[i].w<<endl;
set[v1]=v2;
j++;
}
i++;
}
}
int main()
{
edgeset ee;
int n,e; //n是图的结点数,e是图的边数
n=6;
e=3;
for(int i=1;i<=e;i++)
{
scanf_s("%d",&ee[i].bv);
scanf_s("%d",&ee[i].tv);
scanf_s("%d",&ee[i].w);
}
//ee表示的边集图是按权值从小到大排列的
printf("最小生成树边集及它的权值: \n");
kruskal(ee,n,e);
system("pause");
return 0;
}
prim:

#include "stdio.h"
#include "stdlib.h"
#include "iostream"
using namespace std;
#define N 3
void prim(int c[N][N])
{
//lowcost 为顶点间的最小距离,closest为最小距离上的邻接顶点
//lowcost[i]:与顶点i连通的最小边的权值
//closest[i]:与顶点i连通的邻接顶点
int lowcost[N],closest[N];
int i,j,k,min;

//lowcost,closest初始化
for(i=0;i<N;i++)
{
lowcost[i]=c[0][i];
closest[i]=0;
}
closest[0]=-1;

//寻找U 和 V 之间连接的最短距离的邻接点
for(i=0;i<N;i++)
{
min=32767;
k=0;
//寻找U 和 V 之间连接的最短距离的邻接点
for(j=0;j<N;j++)
{
if((lowcost[j]<min)&&(closest[j]!=-1))
{
min=lowcost[j];
k=j;
}
}
//输出新的邻接顶点,并修改lowcost值
if(k)
{
cout<<"("<<closest[k]<<", "<<k<<") "<<lowcost[k]<<endl;
closest[k]=-1;
for(j=1;j<N;j++)
{
if(closest[j]!=-1)// huo if(!(closest[j]==-1))
{
//修改lowcost值
lowcost[j]=c[k][j];
//修改邻接顶点
closest[j]=k;
}
}
}
}
}

int main()
{
int i,j,a[3][3];
cout<<"请输入二维数组:"<<endl;
for(i=0;i<3;i++)

for(j=0;j<3;j++)

cin>>a[i][j];
cout<<"最小树的结构为:"<<endl;
prim(a);
int q;
cin>>q;
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 python中有哪些简单的算法? 用Python如何 实现DES算法 我想用python的强化学习算法实时控制simulink中pid... 如何利用python语言实现机器学习算法 python简单实现基数排序算法 几种常用算法的Python实现 python根据进程pid获取进程cpu等信息时出错 神经网络自整定PID真的有效吗?我看图书馆的参考书... 如何用python得到当前运行的脚本的PID fast―51ed1e的wifi密码是多少 环氧树脂E-51的化学式 tcl51空调柜机故障代码 E文翻译:你怎样过51节? 请问ff13里任务51怎么打?? E-51环氧树脂的E-51代表什么? 农行金e顺k宝应该下怎么驱动?51开头! 空调打开以后就显示E和51是什么原因呀? 手机没关机但是黑屏什么都按不了,是什么原因 我的电脑总是突然就黑屏,但是没有关机这是为什么呢 8个月手机,突然黑屏,也没显示关机,后来按开机键... PYTHON 问题 Python实现viterbi算法原理流程是什么样的 请用Python实现CMAR算法 求计算算法的复杂度 (Python写的逻辑) 安川运动控制器有什么优势 如何把 python predict程序 做成 windows 守护进程 TAN算法的Python实现? 手机qq播放小视频提示网络链接异常或视频内容无法打开,怎么回事? 工龄计算公式是什么? 工龄计算公式 EXCEL中计算工龄(月)的公式 工龄是怎么算的 工龄计算公式,请求大家帮忙,谢谢! 连续工龄怎样计算? EXCEL中如何计算连续工龄 新劳动法规定什么条件职工工龄可以连续计算? 劳动法十年工龄是怎么计算的,有公式吗 求工龄工资的三种计算方法 社保按工龄怎么计算公式 EXCEL中如何用公式算员工工龄?