c语言克鲁斯卡尔算法

article/2025/11/10 18:51:52

克鲁斯卡尔思路以及代码分析

在这里插入图片描述

在这里插入图片描述

我们用邻接矩阵来表示该图,克鲁斯卡尔算法思想及找到最小边,查看是否形成回路,若形成回路则这条边不形成,若不形成回路则构成最小路径,以此类推。(思路和代码都在下方)
在这里插入图片描述

  • 第一步edge{(0,2,1)}

  • 在这里插入图片描述

  • [ ]第二步 edge{(3,5,2)}

  • 在这里插入图片描述

  • 第三步edge{(1,4,3)}

  • 在这里插入图片描述

  • 第四步edge{(2,5,4)}
    在这里插入图片描述

  • 第五步edge{(0,3,5)}
    i==j 不添加
    在这里插入图片描述

  • 第六步edge{(1,2,5)}
    在这里插入图片描述
    最短路径形成,后面的思路以此类推但是都形成回路。不添加。
    在这里插入图片描述

  1. 创建一个Edge数组,存放邻接矩阵的有用数据
typedef struct Edge{int x;int y;int cost;//路径大小
}
int n = g->NumVertices;Edge *edge = (Edge *)malloc(sizeof(Edge) * (n*(n-1)/2));assert(edge != NULL);int k = 0;//初始化edgefor(int i=0; i<n; ++i){for(int j=i; j<n; ++j){if(g->Edge[i][j]!=0 && g->Edge[i][j]!=MAX_COST){edge[k].x = i;edge[k].y = j;edge[k].cost = g->Edge[i][j];k++;}}}
  1. 对Edge中的cost排序(对图的边进行从小到大进行排序)
    排序我们直接用stdlib.h中的qsort快速排序方法
int cmp(const void*a, const void *b)
{return (*(Edge*)a).cost - (*(Edge*)b).cost;
}
qsort(edge,k,sizeof(Edge),cmp);

3.创建father数组用来存放父节点
father数组用来存放各个节点的父节点,如果两个节点的father节点相同则不形成路径。(避免形成回路)

int *father = (int*)malloc(sizeof(int) * n);
assert(father != NULL);
for(i=0; i<n; ++i)
{father[i] = i;
}

4.克鲁斯卡尔算法核心

for(i=0; i<n; ++i){//如果父亲节点不同则变为最小路径并打印if(!Is_same(father,edge[i].x,edge[i].y)){v1 = edge[i].x;v2 = edge[i].y;printf("%c-->%c : %d\n",g->VerticesList[v1],g->VerticesList[v2],edge[i].cost);//改变父亲节点Mark_same(father,edge[i].x,edge[i].y);}}
}
  1. Is_same方法解释
bool Is_same(int *father, int i, int j)
{
//寻找i的父节点while(father[i] != i){i = father[i];}//寻找j的父节点while(father[j] != j){j = father[j];}//判断i,j是否相等return i==j;
}
  1. Mark_same方法解释
void Mark_same(int *father, int i, int j)
{
//寻找i的父节点while(father[i] != i){i = father[i];}//寻找j的父节点while(father[j] != j){j = father[j];}//将j的父节点转化为ifather[j] = i;
}

http://chatgpt.dhexx.cn/article/nis1wPUl.shtml

相关文章

了解克鲁斯卡尔算法

文章目录 Kruskal算法如何工作Kruskal算法的示例Kruskal算法伪代码C示例Kruskal算法 vs Prim算法Kruskal算法的复杂度Kruskal算法的应用参考文档 在本教程中&#xff0c;您将学习Kruskal算法如何工作。此外&#xff0c;您还将找到C语言的示例。     Kruskal算法是一种最小生…

克鲁斯卡尔算法

什么是克鲁斯卡尔算法 在知道克鲁斯卡尔算法之前我们先来看一下什么是最小生成树。 最小生成树&#xff1a;在一个有n个结点的无向图中选出最少的边&#xff0c;保证所选边权相加之和最小以及该图中依然有n个结点并且n个结点连通。一共有n个结点&#xff0c;要保证连通&#…

Kruskal算法(克鲁斯卡尔算法)

Kruskal算法 Kruskal算法是一种用来查找最小生成树的算法&#xff0c;由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪心算法的应用。 概念解释 Kruskal算法定义&#xff1a;**先构造一个只含 n 个顶点、而边集为空的子图&…

KruskalAlgorithm(克鲁斯卡尔算法)

KruskalAlgorithm介绍 克鲁斯卡尔(Kruskal)算法&#xff0c;是用来求加权连通图的最小生成树的算法。基本思想&#xff1a;按照权值从小到大的顺序选择 n-1 条边&#xff0c;并保证这 n-1 条边不构成回路具体做法&#xff1a;首先构造一个只含 n 个顶点的森林&#xff0c;然后…

数据结构——克鲁斯卡尔(Kruskal)算法

克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普里姆算法不同&#xff0c;它的时间复杂度为O&#xff08;eloge&#xff09;&#xff08;e为边数&#xff09;&#xff0c;适合于求边稀疏的网的最小生成树 。克鲁斯卡尔算法从另一途径求网的最小生成树。其基本思想是&a…

克鲁斯卡尔(Kruskal)算法(严蔚敏C语言)

克鲁斯卡尔算法(Kruskal) ​ 克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普里姆算法不同&#xff0c;它的时间复杂度为O&#xff08;eloge&#xff09;&#xff08;e为网中的边数&#xff09;&#xff0c;所以&#xff0c;适合于求边稀疏的网的最小生成树 。 ——百…

4.《学会提问》

1.书中的观点 批判性思维会教你很多技能和态度&#xff0c;让你理性地找到对自己有意义的答案并为此感到自豪。批判性思维鼓励你倾听他人&#xff0c;向别人学习&#xff0c;同时掂量别人所说的话&#xff0c;看看它们的分量如何。如此&#xff0c;你将了解到我们必须要依赖他人…

如何提问——提问的艺术

转存失败重新上传取消https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

《提问的艺术》读书笔记

分享读《提问的艺术》的xmind总结&#xff0c;每周听一本书&#xff0c;打卡第一周

(转载) 提问的艺术

虽然这是老话常谈&#xff0c;但是最近的回答问题的过程中&#xff0c;有点感触。你问题问的好&#xff0c;问的准确&#xff0c;回答你的人才有积极性给你答复&#xff0c;这样你又可以更快的解决你的问题。好多人不知道如何提问&#xff0c;所以我打算把这篇老文章转过来置顶…

论程序员提问的艺术

最近工作比较忙&#xff0c;加上空闲时间大部分都是在维护开发【云狗AI】&#xff0c;所以也有一段时间没更新视频了&#xff0c;有不懂的&#xff0c;也可以问一下【云狗AI】以后我也会花更多的时间在维护这个项目中。争取给大家带来更好的体验。 主要是因为最近没发现什么特…

提问的艺术[转]

这是刚看到的 所以转一下 也是警示自己的伸手行为 原文&#xff1a;How To Ask Questions The Smart Way 译文链接&#xff1a;提问的艺术 作者&#xff1a; 艾瑞克.史蒂文.雷蒙德(Eric Steven Raymond) <esrthyrsus.com> 瑞克.莫恩(Rick Moen) <respond-autolinuxmaf…

【提问的艺术】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

提问的艺术/怎么高效的提问

唉,可能是因为见过的人多了吧,不管是在现实世界中,还是在网络上,总是需要向别人询问一些东西的, 有的人来问,谦谦有礼,感觉很好,帮助了别人,也没损失什么,有的人来问,就是真心不想搭理他,搭理了他就是 浪费自己的时间,还心理不好受的. 今天不说现实中怎么提问.就说在互联网上.…

《提问的艺术》读后感

前言提问前 他明明能帮到我却不帮我提问前必知必会的一些事关于搜索引擎 提问时 找准对象学会停顿组织你的问题清晰的发问低声下气代替不了做自己的家庭作业删除无意义的要求不要把问题标记为紧急 即使对你而言的确如此礼貌总是有益的对待无礼提问禁区 总结 前言 众所周知&am…

提问的艺术,原文链接

你提的问题没有任何有用的信息&#xff0c;u hava a poop。 提问的艺术 今天在拉屎的时候看到QQ群里有人问问题&#xff0c;那个问题太他妈蠢了&#xff0c;所以我就写了这一片博客&#xff0c;如果再有人问愚蠢的问题我就把这篇博客丢给他。 提问的艺术 原文链接&#xff…

《提问的艺术:如何快速获得答案》(精读版)

《提问的艺术》《How-To-Ask-Questions-The-Smart-Way》 https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way © 2001 Eric Steve Raymond © 2001 D.H.Grand(nOBODY/Ginux) © 2012 Conmajia《提问的艺术&#xff1a;如何快速获得答案》原著Eric…

Serverlet理解

部分转载自&#xff1a;https://blog.csdn.net/javaloveiphone/article/details/8154791 从上图可以看出 Tomcat 的容器分为四个等级&#xff0c;真正管理Servlet 的容器是Context 容器&#xff0c;一个 Context 对应一个 Web 工程。除了将 Servlet 包装成 StandardWrapper 并作…

java serverlet_Serverlet程序

Serverlet是用Java编写的服务器端程序;主要用于交互地浏览和修改数据&#xff0c;生成动态Web内容; 一个serverlet就是一个继承于HttpServlet抽象类的Java类&#xff1b;下面先看一个简单的例子 import javax.servlet.*;importjavax.servlet.http.HttpServlet;importjavax.serv…

serverlet 区别_jsp serverlet 区别

JSP和Servlet的概念对于JSP初学者来说比较不清楚&#xff0c;以下总结一些个人看法&#xff1a; (1).简单的来说Jsp就是含有Java代码的html&#xff0c;而servlet是含有html的Java代码&#xff1b; (2).Jsp最终也是被解释为servlet并编译再执行&#xff0c;Jsp不过是servlet的另…