C語言Kruskal算法求最小生成樹

Kruskal算法求出最小生成樹。

圖形

在這里插入圖片描述


算法描述

先找最小權值邊為1的邊有(V1,V4),(V2,V9),保證不產生回路就可以成功選擇邊

在這里插入圖片描述

除去上一次找的邊后,在找權值最小的邊為2的有(V2,V3),(V4,V3),(V5,V6),(V9,V8),連接不產生回路的邊

在這里插入圖片描述

除去之前找過的邊,后面再看權值最小的邊為3的邊有(V1,V3),(V7,V8),(V9,V7)
按順序判斷(V1,V3)邊會產生回路排除,(V7,V8)可選邊,當連接完(V7,V8)后判斷(V9,V7)連接會造成回路排除

在這里插入圖片描述

排除找過的邊后,找下一個權值最小的為4的邊有(V6,V7),(V9,V6)
順序判斷,( V6,V7)符合,連接完(V9,V6)判斷連接(V9,V6)是回路不符合

在這里插入圖片描述

完成所以點相連結束
有N個點,最小生成樹有N-1個邊

在這里插入圖片描述


C語言Kruskal算法實現
//C語言Kruskal算法實現
#include<stdio.h>
#define M 1000//M表示無窮用1000代替
#define N 9 //N行N列的矩陣void loop(int arr[N][N],int dot,int c[N],int* count)
{int i;c[*count] = dot;*count = *count + 1;for ( i = 0; i < N; i++){if (arr[dot][i] == 1){ int flage = 1;for (int j = 0; j < *count; j++){if (i == c[j]){flage = 0;break;}}if(flage){ loop(arr, i, c,count);}}}
}
//標記和判斷是否為回路,不是回路返回1,是回路反回0
int Is(int arr[N][N], int row, int column)
{if (arr[row][column] == 0 || arr[column][row] == 0){int a[N] = { 0 };int b[N] = { 0 };loop(arr, row, a);loop(arr, column, b);int flag = 1;for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){if (a[i] == b[j] && a[i] !=0)flag = 0;}}//沒產生回路標記1if(flag){ arr[row][column] = 1;arr[column][row] = 1;return 1;}//產生回路標記-1	else{arr[row][column] = -1;arr[column][row] = -1;	}}return 0;
}
int main()
{//把上圖權值對應值寫成鄰接陣int map[N][N] ={{M,6,3,1,M,M,M,M,M},{6,M,2,M,M,M,M,M,1},{3,2,M,2,M,M,M,M,M},{1,M,2,M,10,M,M,M,M},{M,M,M,10,M,2,M,M,6},{M,M,M,M,2,M,4,M,4},{M,M,M,M,M,4,M,3,3},{M,M,M,M,M,M,3,M,2},{M,1,M,M,6,4,3,2,M}};int arr[N][N] = { 0 };//用來標記邊int count = 0;//用來記錄邊的數量,最小生成樹的邊為數N-1int i = 0, j = 0;int min = M;//記錄最小權值int value = 0;//當前要找的最小權值int sum = 0;//記錄總權值//打印printf("最小生成樹連接的邊分別為:\n");while (1){min = M;//每次把最小權設置為最大//找權值最小邊,和最小權值邊的數量for (i = 0; i < N; i++){for (j = 0; j < N; j++){if (map[i][j] < min && map[i][j] > value)//判斷是否為最小權{min = map[i][j];}}}value = min;//根據前面循環得到最小權值邊,標記不構成回路的邊for (i = 0; i < N; i++){for (j = 0; j < N; j++){if (map[i][j] == min && Is(arr, i, j)){//打印printf("權值為%d,連接V%d,V%d\n", value, i + 1, j + 1);sum += min;count++;if (count == (N - 1))break;}}if (count == (N - 1))break;}//找夠邊數跳出循環if (count == (N - 1))break;}printf("最小生成樹的權值總和為:%d\n",sum);return 0;
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24446.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

制作AI問答機器人:從0到1的完整指南

在數字化轉型的浪潮中&#xff0c;企業正追求更高效、智能的客戶服務解決方案。AI問答機器人以其快速響應、全天候服務和持續學習的能力&#xff0c;成為了提升客戶滿意度和加速業務發展的關鍵工具。本文將深入探討如何制作一個企業級的AI問答機器人&#xff0c;并強調其功能體…

OpenAI發表研究論文 介紹了一種逆向工程AI模型工作原理的方法

ChatGPT 開發商 OpenAI 構建人工智能的方法本周遭到了前員工的抨擊&#xff0c;他們指責該公司利用可能有害的技術冒不必要的風險。今天&#xff0c;OpenAI 發布了一篇新的研究論文&#xff0c;目的顯然是為了表明它在通過提高模型的可解釋性來應對人工智能風險方面的認真態度。…

hot100 -- 二分查找

目錄 前言 &#x1f382;搜索插入位置 &#x1f33c;搜索二維矩陣 &#x1f33c;排序數組元素第一和最后一個位置 &#x1f33c;旋轉排序數組 &#x1f4aa;旋轉排序數組中的最小值 &#x1f4aa;兩個正序數組的中位數 前言 二分算法學習_時間超限ac:0%-CSDN博客 &#…

2024年【起重機械指揮】考試及起重機械指揮新版試題

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 起重機械指揮考試考前必練&#xff01;安全生產模擬考試一點通每個月更新起重機械指揮新版試題題目及答案&#xff01;多做幾遍&#xff0c;其實通過起重機械指揮試題及解析很簡單。 1、【多選題】《中華人民共和國特…

【Androi】安卓發展歷程詳解

人不走空 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌賦&#xff1a;斯是陋室&#xff0c;惟吾德馨 目錄 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌…

git推送代碼到github拒絕推送的解決方案

這里描述一下本地推送的場景&#xff0c;首先我在碼云上建立了一個前端項目&#xff0c;進行了自己的個性化開發&#xff0c;后期在github上創建了一個一樣的項目倉庫存放代碼。使用webstorm進行代碼開發。在下面這個位置可以選擇推送的代碼位置。 選擇推送github倉庫之后&…

Python深度學習基于Tensorflow(16)基于Tensorflow的對話實例

文章目錄 基礎數據清洗數據生成詞匯表定義分詞器并制作數據集構建Transformer模型并訓練模型推理 Tensorflow 的核心就是注意力機制&#xff0c;在之前詳細的介紹過&#xff0c;具體可以看這個&#xff1a;Python深度學習基于Tensorflow&#xff08;9&#xff09;注意力機制_te…

在Java中為什么對a賦值為10,在進行a++時還是等于10呢

首先我們看這樣一組代碼 public class demo1 {public static void main(String[] args) {int a10;aa;System.out.println(a);} } 結果&#xff1a;10不是在第二步有a操作嗎&#xff1f;為什么還是10呢&#xff1f; a的執行步驟如下&#xff1a; 保存當前a的值&#xff08;即10…

websocket鏈接攜帶參數

前端創建鏈接時官方提供的構造函數 var aWebSocket new WebSocket(url, [protocols]); url&#xff1a;要連接的URL&#xff1b;這應該是WebSocket服務器將響應的URL。 protocols&#xff1a;可選&#xff1b;一個協議字符串或者一個包含協議字符串的數組。這些字符串用于指定…

智能語音電銷機器人可以做哪些事情?ai語音機器人系統

智能語音電銷機器人軟件的出現&#xff0c;給很多企業都帶來了福利&#xff0c;尤其是電銷企業&#xff0c;不僅工作效率提升了&#xff0c;成本降低了&#xff0c;還能實現智能化管理客戶的出現&#xff0c;給很多企業都帶來了福利&#xff0c;尤其是電銷企業&#xff0c;不僅…

python初學者筆記(八)——數字階乘

#python初學者筆記&#xff08;8&#xff09;——數字階乘 階乘是基斯頓卡曼于 1808 年發明的運算符號,是數學術語,一個正整數的階乘(factorial)是所有小于及等于該數的正整數的積。 下面利用Python編寫數字階乘 ##1.方法一:利用函數的方法&#xff0c;求輸入值的階乘 #coding…

WebAPI 前端開發流程:深度解析與實踐探索

WebAPI 前端開發流程&#xff1a;深度解析與實踐探索 在前端開發的世界里&#xff0c;WebAPI扮演著至關重要的角色&#xff0c;它作為前端與后端溝通的橋梁&#xff0c;確保了數據的流暢傳輸與功能的完整實現。本文將詳細探討WebAPI前端開發流程&#xff0c;從四個方面、五個方…

什么情況下需要配戴助聽器

以下幾種情況需要考慮配戴助聽器&#xff1a; 1、聽力無波動3個月以上的感音神經性聽力障礙。如:先天性聽力障礙、老年性聽力障礙、噪聲性聽力障礙、突聾的穩定期等&#xff0c;均可選配合適的助聽器。 2、年齡方面。使用助聽器沒有嚴格的年齡限制&#xff0c;從出生數周的嬰…

深度學習Week16——數據增強

文章目錄 深度學習Week16——數據增強 一、前言 二、我的環境 三、前期工作 1、配置環境 2、導入數據 2.1 加載數據 2.2 配置數據集 2.3 數據可視化 四、數據增強 五、增強方式 1、將其嵌入model中 2、在Dataset數據集中進行數據增強 六、訓練模型 七、自定義增強函數 一、前言…

Geoserver源碼解讀一(環境搭建)

一、Github地址 https://github.com/geoserver/geoserver 1.1 克隆代碼 git clone https://github.com/geoserver/geoserver.git 1.2 選擇版本 版本選擇參考我的上一篇文章 Geoserver 以及 Geotools各版本和jdk版本對照表 此處我選擇的是兼容jdk8的最后一個版本 git che…

netty+springboot+vue聊天室(需要了解netty)

先看看這個使用websocket實現的聊天室&#xff0c;因為前端是使用websocket&#xff0c;和下面的demo的前端差不多就不解釋實現原理&#xff0c;所以建議還是看看(要是會websocket的大佬請忽略) springbootwebsocketvue聊天室 目錄 一、實現內容二、代碼實現1.后端2.前端源碼…

html+CSS+js部分基礎運用17

在圖書列表中&#xff0c;為書名“零基礎學JavaScript”和“HTML5CSS3精彩編程200例”添加顏色。&#xff08;請用class或style屬性實現&#xff09;&#xff0c;效果如下圖1所示&#xff1a; 圖1 圖書列表 Class和style的綜合應用。&#xff08;1&#xff09;應用class的對象、…

命令行打包最簡單的android項目從零開始到最終apk文件

準備好需要的工具 AndroidDevTools - Android開發工具 Android SDK下載 Android Studio下載 Gradle下載 SDK Tools下載 jdk的鏈接我就不發出來,自己選擇,我接下來用的是8版本的jdk和android10的sdk sdk的安裝和環境變量的配置 sdk tool壓縮包打開后是這樣子,打開sdk mana…

高防CDN是如何應對DDoS和CC攻擊的

高防CDN&#xff08;內容分發網絡&#xff09;主要通過分布式的網絡架構來幫助網站抵御DDoS&#xff08;分布式拒絕服務&#xff09;和CC&#xff08;挑戰碰撞&#xff09;攻擊。 下面是高防CDN如何應對這些攻擊的詳細描述&#xff1a; 1. DDoS攻擊防護 DDoS攻擊通過大量的惡…

SREC用什么軟件編程:全面解析與編程工具選擇

SREC用什么軟件編程&#xff1a;全面解析與編程工具選擇 在嵌入式系統開發中&#xff0c;SREC文件格式扮演著至關重要的角色&#xff0c;用于存儲和傳輸二進制數據。然而&#xff0c;對于許多初學者和開發者來說&#xff0c;如何選擇合適的軟件來編寫SREC文件卻是一個令人困惑…