prim求最短路径C语言,[图论]Prim算法求最小支撑树和最短路径

这个是以前所学,现在总结成博文一篇。

对于图论中的求解最小支撑树问题和最短路径问题都有比较经典的算法,比如最小支撑树可以采用“破圈法”,求解最短路径可以用“Dijkstra算法”。这里笔者将回顾下求解最小支撑树的Prim算法和最短路径算法。

1、Prim算法求解最小支撑树

例1:用Prim算法求解图1的一个最小支撑树。

0818b9ca8b590ca3270a3433284dd417.png

图1:例图

首先,给出Prim算法:

0818b9ca8b590ca3270a3433284dd417.png

实现的C语言代码如下:

#include

int matrix[100][100];

int E[100]={0},tree[100][100]={0};

int n,i,j;

void inputmatrix()

{

printf("请输入邻接矩阵的阶数:\n");

scanf("%d",&n);

printf("请输入邻接矩阵:\n");

for(i=0;i

{

for(j=0;j

scanf("%d",&matrix[i][j]);

}

}

void caculate(int n,int a[100][100])

{

int k=n-1,t=0,t1,t2,min,j,m=1,flag=1;/*k,k1作为循环的次数,flag标记是否有支撑树*/

E[0]=1; /*先放入一个点*/

tree[0][0]=a[0][0];

while(k--)

{

min=100000;

for(j=0;j

{

for(i=0;i

if(E[i]==1&&E[j]==0&&min>a[i][j]&&a[i][j]!=0) /*寻找符合条件的数*/

{

t1=j;

t2=i;

min=a[i][j];

}

}

E[t1]=1; /*标记为1,代表已经用过*/

tree[t2][t1]=a[t2][t1]; /*记录值*/

tree[t1][t2]=a[t1][t2]; /*记录值*/

m++;

}

for(i=0;i

{

if(E[i]==0)

{

printf("没有支撑树\n");

flag=0;

break;

}

}

if(flag==1) /*证明存在支撑树*/

{

printf("输出对应的最小支撑树所对应的矩阵:\n");

for(i=0;i

{

for(j=0;j

printf("%d ",tree[i][j]);

printf("\n");

}

}

}

main()

{

inputmatrix();

caculate(n,matrix);

system("pause");

}

针对图1的例子,我们输入数据求得结果:

0818b9ca8b590ca3270a3433284dd417.png

2、改进的Prim算法求解最短路径

例2:利用改进的Prim算法求解图2的最短路径问题。

0818b9ca8b590ca3270a3433284dd417.png

图2:例图

首先给出该算法的描述。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

下面是该算法的C语言实现。

#include

int matrix[100][100];

int E[100]={0},distance[100]={0};

int path[100][100] = {0};//初试为空,记录path

int n,i,j,ini;//ini为初始下标

char temp[100];

void inputmatrix()

{

printf("请输入邻接矩阵的阶数:\n");

scanf("%d",&n);

printf("请输入有向图的邻接矩阵(输入0代表无穷大):\n");

for(i=0;i

{

for(j=0;j

scanf("%d",&matrix[i][j]);

}

printf("请输入需计算的起始点下标:\n");

scanf("%d",&ini);

E[ini-1]=1;

path[ini-1][0]=ini;

}

void caculate(int n,int a[100][100])

{

int k=n-1,t=0,t1,t2,min,j,m=1,w,flag=0;/*k,k1作为循环的次数,flag=1意味着可以继续循环,flag=0,跳出*/

while(k--)

{

min=100000;

flag=0;// 初始化

for(j=0;j

{

for(i=0;i

if(E[i]==1&&E[j]==0&&min>(a[i][j]+distance[i])&&a[i][j]>0) /*寻找符合条件的数*/

{

flag=1;// 标记为1,找到!继续循环

t1=j;

t2=i;

min=a[i][j]+distance[i];

}

}

if(flag==0)

break;//跳出

distance[t1]=min;

E[t1]=1; /*标记为1,代表已经用过*/

for(j=0;j

{

if(path[t2][j]!=0)

{

path[t1][j]=path[t2][j];

}

else

{

path[t1][j]=t1+1;

break;

}

}

m++;

}

printf("\n\n----下面为反圈法(prim法)计算结果----\n\n",ini,i+1,distance[i]);

for(i=0;i

{

if(E[i]==1)

{

printf("点%d到点%d的最小距离:%d\n",ini,i+1,distance[i]);

printf("其最短路径:");

for(j=0;j

{

if(path[i][j]!=0)

{

printf("v%d ",path[i][j]);

}

else break;

}

printf("\n");

}

else

printf("点%d到点%d没有路可通!\n\n",ini,i+1);

}

}

main()

{

inputmatrix();

caculate(n,matrix);

system("pause");

}

针对图2,给出运行结果:

0818b9ca8b590ca3270a3433284dd417.png

笔者水平有限,难免有不足,请批评指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm镜像源_pycharm安装第三方库

点击蓝字关注我们hello,大家好,我是你们的小编大飞。小编一直在学习编程语言,挑选了很久之后决定入了python的坑(bushi)。而python之所以火,是因为它专注于如何解决问题、自由开放的社区环境以及丰富的第三方库。几乎可以这么说&a…

android系统源码的环境下用make来编译,Android源码编译系统入门

做过 Android 平台开发的朋友对make,mm或make clean命令应该很熟悉,但也许大家只是熟知这些命令的作用却不知道这些命令底下有些什么原理?那么今天我就带着大家推开Android编译系统的大门,探索一下这片未知的恐怖之森(问啥要用恐怖…

(mac)阿里云ECS服务器配置过程

-----首先本人是半只脚入门的iOS开发者,弄这个只是单纯想多学点东西。 -----阿里云服务器的配置选择:既然是学习用的,最最基础的配置就行了。1M带宽,1核1G...这就不详述了。没啥可选的,(其中有个创建实例&a…

android 换到iphone,从安卓换到苹果到底是什么感受?最后一个让我彻底放弃了iPhone!...

原标题:从安卓换到苹果到底是什么感受?最后一个让我彻底放弃了iPhone!iPhone X是近几年来苹果最具创新力的iPhone,然而高昂的售价让很多消费者望而却步。随着今年苹果秋季新品发布会的临近,苹果即将发布价格更低廉&…

php 5.5 xhprof for windows

今天看到一个好的性能优软件xhprof(有facebook开发的类库)在国内找了很多网站都没有找到相关php5.5的扩展,只好FQ还是外面的世界精彩一下就找到了link (http://windows.php.net/downloads/pecl/releases/xhprof/0.10.6/)如果不能FQ的小伙伴可以到我的百度…

鸿蒙分布式体验,一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验

原标题:一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验【手机中国新闻】9月10日下午,华为召开HDC2020大会,全新的HarmonyOS 2.0正式发布。新系统的分布式能力全面升级,同时还为开发者提供了完整分布式设备与应用开发生态&…

如何在android模拟器中安装apk

1. 启动android模拟器 2. 将要安装的apk,拷贝在与adb.exe同文件夹中。我的路径:D:\android\android-sdk-windows\platform-tools 3. 在cmd中,进入上目录,输入adb install xxx.apk,最后可看见success 4. 回到android模拟…

传感器系列之4.3流量传感器

4.3 流量数据采集实验 一、实验目的掌握水流量计的结构与工作原理掌握霍尔传感器的使用二、实验材料具有USB 串口通讯的PC 机1 台ADS1.2 集成开发软件1 套J-Link-ARM 仿真器及软件1 套NXP LPC2378 实验节点板1 个LCD 显示实验板1 个BMP085数字气压传感器模块1个三、实验原理流量…

鸿蒙日程管理若离,2020华为HDC日程确定,鸿蒙、HMS以及EMUI 11成最关注点

HDC:华为开发者大会,目前已经确定将在9月10日正式开幕。日前华为已经在其官网公布了HDC的日程,从现在的消息看华为开发者大会有三大点最受业内关注。鸿蒙操作系统鸿蒙操作系统应该是大家关注最大的话题,不过此前余承东已经正式表示…

语言课设医院诊疗系统_江苏孤独症孩子有哪些典型特征?上海六一儿童医院

孤独症孩子有哪些典型特征当家长发现孩子不爱说话,不理人的时候,有时怀疑孩子是不是患了孤独症。对于孤独症的孩子和正常的孩子还是不一样的。那么,孤独症孩子有哪些典型的特征呢?孤独症孩子的典型特征主要有以下几点:特征一&…

android 6.0适应的机型,提升用户体验 可升Android 6.0机型盘点

原标题:提升用户体验 可升Android 6.0机型盘点【手机中国 导购】2009年Android系统正式发布,由此加速手机走向智能化进度。如今,随着Android系统日渐成熟,众多手机厂商都在此基础上研发出符合自家特色的系统版本,并且流…

antd 能自适应吗_一种能自适应识别母线运行方式的备自投装置应用探讨

中山供电局的研究人员江清楷,在2019年第8期《电气技术》杂志上撰文,介绍了一种220kV备自投装置,列出了母联备自投和线路备自投的充电条件及起动条件。以220kV逸仙变电站为例,指出该备自投装置在双母线单分段接线的变电站应用中存在…

html页面tableview,用JS写的一个TableView控件代码

请看看编码是否规范,使用是否方便HTML:代码编号姓名{value}{value}编号名称{value}{value}Javascript:代码//class TableView {//构造函数function TableView(ID){var htmlTable document.getElementById(ID);this.container htmlTable.getElementsByTagName(&quo…

HTML中空格代码为,html空格 html 空格代码

html 空格和html空格代码篇在HTML网页排版机关时,一个翰墨与翰墨间空格可使用一个使用空格键直接空一格便可。然则要实现多个空格间隔,打再多空格键空格,始终至多展现一个空格地位。那末如何才智html构造中笔墨间完成多个空格成果&#xff1f…

centos 下载文件很慢_CentOS镜像下载

官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/step1: 进入下载页,选择阿里云站点进行下载Actual Country 国内资源 Nearby Countries 周边国家资源阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/每个链接…

移动端html搜索怎么写,移动端实现搜索功能

在移动端需要实现如下搜索相关的功能点击搜索按钮实现搜索搜索按钮这里首先就会遇到怎么弹出搜索按钮。在html5 中 input 已经支持search 类型,iso/安卓所幸也都有自己的相应实现。只需要按照移动端的标准来写,那我就会为我们提供我们所需的搜索按钮。按…

计算机裸机与应用程序及用户之间的桥梁是,2016计算机二级《MS Office》单选试题与解析...

2016计算机二级《MS Office》单选试题与解析(1)下列叙述中正确的是A)一个算法的空间复杂度大,则其时间复杂度也必定大B)一个算法的空间复杂度大,则其时间复杂度必定小C)一个算法的时间复杂度大,则其空间复杂度必定小D)算法的时间复杂度与空间…

10kv线路负载率计算_10kV配电线路保护的整定计算

1、10kV配电线路的特点10kV配电线路结构特点是一致性差,如有的为用户专线,只接带一、二个用户,类似于输电线路;有的呈放射状,几十台甚至上百台变压器T接于同一条线路的各个分支上;有的线路短到几百m&#x…

diamond升级IP,覆盖的时候报错

这几天给客户调试DDR3 SDRAM Controllerd发现个很奇怪的问题。客户之前用的IP是DDR3 SDRAM Controllerd 1.4,客户想升级为DDR3 SDRAM Controllerd 3.0。客户直接双击之前的工程,然后regenerate,发现报错了,如下图。然后我就思考是…

一台微型计算机的处理速度主要取决于,2017年答案计算机等级考试题库「附答案」...

2017年答案计算机等级考试题库「附答案」一、单选题1、世界上首次提出存储程序计算机体系结构的是A 莫奇莱 B 艾仑图灵 C 乔治布尔 D 冯诺依曼2、世界上第一台电子计算机诞生于A 1941年 B 1946年 C 1949年 D 1950年3、世界上第一台电子数字计算机采用的主要逻辑部件是A 电子管 …