该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#define INFINITY 30000//权值最大值

#define max_vertex_num 20//最大顶点数

typedef struct{

int arcs[max_vertex_num][max_vertex_num]; //邻接矩阵

int vexnum,arnum;//图当前的顶点和边数

}Graph;

typedef struct{

int adjvex;//某顶点与已构造好部分生成树的顶点之间权值最小的顶点

int lowcost;//某顶点与已构造好部分生成树的顶点之间的最小权值

}ClosEdge;//用prim算法求最小生成树的辅助数组

void CreateGraph(Graph g)//生成邻接矩阵

{

int i,j;

int start,end,weight;

for(i=1;i<=g.vexnum;i++)

for(j=1;j<=g.vexnum;j++)

g.arcs[i][j]=INFINITY;//矩阵初始化

printf("输入每条边的两个关联顶点编号和其权值:\n");

for(i=1;i<=g.arnum;i++)

{

scanf("%d %d %d",&start,&end,&weight);

g.arcs[start][end]=weight;

g.arcs[end][start]=weight;

}

}

int minimun(ClosEdge cl[],int vnum)//在辅助数组中选择权值最小的顶点并返回其位置

{

int i;

int w,p;

w=INFINITY;

for(i=1;i<=vnum;i++)

{

if(cl[i].lowcost!=0&&cl[i].lowcost

{

w=cl[i].lowcost;

p=i;

}

}

return p;

}

void MiniSpanTree_PRIM(Graph g,int u)

{

ClosEdge closedge[max_vertex_num];

int i,j,k;

printf("最小生成树:\n");

for(j=1;j<=g.vexnum;j++)//辅助数组初始化

{

if(j!=u)

{

closedge[j].adjvex=u;

closedge[j].lowcost=g.arcs[u][j];

}

}

closedge[u].lowcost=0;//初始,U={u} ;

for(i=1;i

{

k=minimun(closedge,g.vexnum);//求生成树的下一个顶点

printf("%d %d\n",closedge[k].adjvex,k);

closedge[k].lowcost=0;//第k个顶点并入U集

for(j=1;j<=g.vexnum;j++)//新顶点并入后重新选择最小边

{

if(g.arcs[k][j]

{

closedge[j].adjvex=k;

closedge[j].lowcost=g.arcs[k][j];

}

}

}

}

int main()

{

Graph g;

char jx='y';

int u;

while(jx!='N'&&jx!='n')

{

printf("请输入图的顶点和边数:\n");

scanf("%d %d",&g.vexnum,&g.arnum);

CreateGraph(g);

printf("请输入构造最小生成树的开始顶点:\n");

scanf("%d",&u);

MiniSpanTree_PRIM(g,u);

printf("最小生成树构造完毕,继续进行吗?\n");

scanf("%c",&jx);

}

return 0;

}

c 语言寻找最小生成树,求助,关于求无向图的最小生成树代码相关推荐

  1. python求m和n之间的所有素数_C语言求助,《求m和n之间的所有素数》

    题目: C语言求助,<求m和n之间的所有素数> [问题描述] 输入两个正整数m和n(m≥1,n≤500),输出m和n之间的所有素数,每行输出6个。素数是指只能被1和自身整除的正整数,最小的 ...

  2. c语言分母多项乘积怎么算,C++编程 用梯形求积公式求解定积分∫3lnxdx积分区间为(1,2, C语言,用梯形法编程求定积分x^3+x/2+1的值...

    问题标题 C++编程 用梯形求积公式求解定积分∫3lnxdx积分区间为(1,2, C语言,用梯形法编程求定积分x^3+x/2+1的值 2019-8-16来自ip:15.179.13.64的网友咨询 浏 ...

  3. C语言输入一个任意数求各位数的和

    C语言输入一个任意数求各位数的和 int main(void) {int x, r, s = 0;scanf("%d", &x);while (x>0){r = x ...

  4. 怎么证明权重不相同的加权无向图的最小生成树是唯一的 (图论)

    转自:https://blog.csdn.net/liangzhaoyang1/article/details/51602926 设G是所有边权均不相同的无向联通图. 证明一: 首先,易证图G中权值最 ...

  5. C语言使用1到9求出所有k个数字的所有组合的算法(附完整源码)

    C语言使用1到9求出所有k个数字的所有组合的算法 C语言使用1到9求出所有k个数字的所有组合的算法完整源码(定义,实现,main函数测试) C语言使用1到9求出所有k个数字的所有组合的算法完整源码(定 ...

  6. 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

    对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

  7. 并查集与贪心算法的应用之求解无向图的最小生成树

    一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...

  8. (篇四)C语言静态变量法,求各阶乘,的和

    文章目录 静态变量求阶乘相加 普通方法求阶乘相加 本篇仍然是C语言的相关知识,主要分析了用C语言的静态变量来求各个阶乘的和:当然也包括了阶乘和静态变量的相关分析 静态变量求阶乘相加 1.阶乘的概念: ...

  9. matlab求灰度图像梯度,[求助]如何求图像的梯度

    [求助]如何求图像的梯度 书上举例灰度图像: a = 0 0 0 100 100 0 0 0 100 100 0 0 0 100 100 100 100 100 100 100 100 100 100 ...

最新文章

  1. 【专家观点】张亚勤、张宏江:人工智能的未来是什么?
  2. Java 正则表达式中为什么反斜杠“\“需要用“\\\\”表示
  3. python3 的 str bytes 区别
  4. mysql vfp_vfp+mysql问题|交流区 - 梅子Visual FoxPro 编程 - Powered by phpwind
  5. 系统架构师学习笔记-多媒体基础知识
  6. springboot- jsp访问404的问题解决
  7. html5音乐播放时间监测,【HTML5】HTML5中video元素事件详解(实时监测当前播放时间)...
  8. Android开发笔记(三十九)Activity的生命周期
  9. echarts实现svg地图
  10. 【转】ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等--wine
  11. python实现元胞自动机
  12. 源码编辑器怎么编出游戏_编辑游戏
  13. mousewheel事件
  14. C.I.刘易斯的学术之路--- 刘易斯逻辑之十二尾篇
  15. 计算机无法识别佳能5d2,佳能相机连接后电脑显示无法识别
  16. django读取mysql事实数据_Django读取Mysql数据并显示在前端的实例
  17. CAD设置超链接(网页版)
  18. 上海最新住房贷款(含公积金贷款,商业贷款,组合贷款)
  19. AR+教育:ALVA SYSTEMS把图书馆做成了4D百科全书
  20. 2021年中国工业和商业LED照明市场趋势报告、技术动态创新及2027年市场预测

热门文章

  1. css transform旋转属性
  2. HTML、CSS知识学习与整理
  3. 利用map和stringstream数据流解题
  4. 线程同步 阻塞 异步 非阻塞(转)
  5. mysql四-2:多表查询
  6. SSRS 2012 仪表 -- 关键绩效指标
  7. vijos 1030 重叠的方框
  8. JPA入门例子(采用JPA的hibernate实现版本)
  9. Linux下安装、配置PHP环境
  10. 使用DRS的维护模式实现单个VM的测试