主要代碼如下:? ? #include
? ? using namespace std;
? ? const int MAX_EDGE = 100;
? ? const int MAX_NODE = 100;
? ? /*
? ? 定義一條邊
? ? */
? ? typedef struct{
? ? int v;
? ? int t;
? ? int weight;
? ? bool isMST;
? ? }Edge;
? ? /*
? ? 有關算法的一些變量
? ? */
? ? Edge edges[MAX_EDGE];
? ? int nodeSet[MAX_EDGE];
? ? const int MSTSetNum = -1;
? ? int edgeNum;
? ? bool nodeIsMST[MAX_NODE];
? ? int Exchange(Edge *a,Edge *b)
? ? {
? ? Edge t;
? ? t = *a;
? ? *a = *b;
? ? *b = t;
? ? return 0;
? ? }
? ? /*
? ? 實現快速排序算法quick_sort
? ? */
? ? int partition(Edge*edges,int p,int r)
? ? {
? ? int i = p-1,j = p;
? ? for(;j
? ? {
? ? if(edges[j].weight <= edges[r].weight)
? ? {
? ? i++;
? ? exchange(edges+i,edges+j);
? ? }
? ? }
? ? exchange(&edges[i+1],&edges[r]);
? ? return i+1;
? ? }
? ? int quick_sort(Edge edges[],int p,int r)
? ? {
? ? if(p < r)
? ? {
? ? int q = partition(edges,p,r);
? ? quick_sort(edges,p,q-1);
? ? quick_sort(edges,q+1,r);
? ? }
? ? return 0;
? ? }
? ? void Initialize(int nodeSet[],int edgeNum);
? ? void MST_Kruskal(int n);
? ? void test();
? ? int main()
? ? {
? ? test();
? ? return 0;
? ? }
? ? void Initialize(int nodeSet[],int n)
? ? {
? ? if(edgeNum > MAX_EDGE)
? ? {
? ? printf("The total num of edges must be less than %d\n",MAX_EDGE);
? ? exit(EXIT_FAILURE);
? ? }
? ? else
? ? {
? ? int i = 0;
? ? edgeNum = n;
? ? for(;i
? ? {
? ? nodeSet[i] = i;
? ? }
? ? }
? ? }
? ? void MST_Kruskal(int n)
? ? {
? ? Initialize(nodeSet,n);
? ? quick_sort(edges,0,edgeNum-1);
? ? int i;
? ? for(i = 0;i
? ? {
? ? if(nodeSet[edges[i].v]!=nodeSet[edges[i].t])
? ? {
? ? edges[i].isMST = true;
? ? if(i==7)
? ? i = i;
? ? if(nodeIsMST[edges[i].v] || nodeIsMST[edges[i].t])
? ? {
? ? int j;
? ? for(j = 0;j<=i;j++)
? ? {
? ? if(edges[j].isMST)
? ? {
? ? if(edges[j].v == edges[i].v ||
? ? edges[j].t == edges[i].v||
? ? edges[j].v == edges[i].t||
? ? edges[j].t == edges[i].t)
? ? nodeSet[edges[j].v] = nodeSet[edges[j].t] = MSTSetNum;
? ? }
? ? }
? ? nodeIsMST[edges[i].v] = nodeIsMST[edges[i].t] = true;
? ? }
? ? else
? ? {
? ? nodeSet[edges[i].v] = nodeSet[edges[i].t];
? ? nodeIsMST[edges[i].v] = nodeIsMST[edges[i].t] = true;
? ? }
? ? }
? ? }
? ? }
? ? /*
? ? 測試函數
? ? */
? ? void test()
? ? {
? ? edges[0].v = 0,edges[0].t = 1,edges[0].isMST = false,edges[0].weight = 4;
? ? edges[1].v = 0,edges[1].t = 8,edges[1].isMST = false,edges[1].weight = 8;
? ? edges[2].v = 1,edges[2].t = 2,edges[2].isMST = false,edges[2].weight = 8;
? ? edges[3].v = 1,edges[3].t = 7,edges[3].isMST = false,edges[3].weight = 11;
? ? edges[4].v = 2,edges[4].t = 8,edges[4].isMST = false,edges[4].weight = 2;
? ? edges[5].v = 2,edges[5].t = 5,edges[5].isMST = false,edges[5].weight = 4;
? ? edges[6].v = 2,edges[6].t = 3,edges[6].isMST = false,edges[6].weight = 7;
? ? edges[7].v = 3,edges[7].t = 4,edges[7].isMST = false,edges[7].weight = 9;
? ? edges[8].v = 3,edges[8].t = 5,edges[8].isMST = false,edges[8].weight = 14;
? ? edges[9].v = 4,edges[9].t = 5,edges[9].isMST = false,edges[9].weight = 10;
? ? edges[10].v = 5,edges[10].t = 6,edges[10].isMST = false,edges[10].weight = 2;
? ? edges[11].v = 6,edges[11].t = 7,edges[11].isMST = false,edges[11].weight = 1;
? ? edges[12].v = 6,edges[12].t = 8,edges[12].isMST = false,edges[12].weight = 6;
? ? edges[13].v = 7,edges[13].t = 8,edges[13].isMST = false,edges[13].weight = 7;
? ? MST_Kruskal(14);
? ? int i,j;
? ? for(i = 0,j = 0;i<14;i++)
? ? {
? ? if(edges[i].isMST)
? ? {
? ? printf("%d. (%d,%d)-------%d\n",j+1,edges[i].v,edges[i].t,edges[i].weight);
? ? j++;
? ? }
? ? }
? ? }
C++的CIN和COUT操作符的方法
?
- C++(72817)
- CIN(11748)
- COUT(7812)
- 操作符(8987)
相關推薦
MATLAB操作符和特殊字符
MATLAB操作符和特殊字符* 矩陣乘法 .* 數組乘法 ^ 矩陣冪 .^ 數組冪 \ 左除或反斜杠 / 右除或斜杠 ./ 數組除 Kron Kronecker張量積 .. 父目錄 … 繼續
2009-09-22 16:05:17
關于右值引用的一點理解
我們知道對于一些C++內建類型來說,ostream類的操作符<<都提供了輸出到標準輸出流的方法,只需要像下面這樣就能輸出到終端窗口了。
2023-07-21 17:38:14179
Linux命令中“!”操作符的用法
Linux中的'!'符號或操作符可以用作邏輯否定運算符,也可以用于在歷史記錄中獲取命令并進行修改或運行以前執行過的命令。
2023-07-05 10:07:151003
DC-DC的輸入電容Cin和輸出電容Cout計算選型
實際上DC-DC的輸入電容Cin和輸出電容Cout是特別關鍵的器件,在負載波動大影響Vin時,Cin不僅可以輔助Vin提供電流,縮短Vin的響應時間,還可以穩定輸入電壓Vin。而Cout更為關鍵。
2023-07-01 12:53:45502
如何計算DC-DC的輸入電容Cin與輸出電容Cout
引言:實際上DC-DC的輸入電容Cin和輸出電容Cout是特別關鍵的器件,在負載波動大影響Vin時,Cin不僅可以輔助Vin提供電流,縮短Vin的響應時間,還可以穩定輸入電壓Vin。而Cout更為
2023-06-15 15:14:06775
new和malloc函數詳細分析底層邏輯
new操作符從自由存儲區(free store)上為對象動態分配內存空間,而malloc函數從堆上動態分配內存。自由存儲區是C++基于new操作符的一個抽象概念,凡是通過new操作符進行內存申請,該
2023-04-03 09:29:01280
C++入門之表達式
C++中提供了很多操作符且定義了什么時候可以用于操作基本類型,其還允許我們定義用于操作class類型的操作符,接下來幾篇文章將會介紹C++中用于基本類型的操作符,與此同時也會介紹一些庫中操作符。一個
2023-03-17 13:55:04249
C語言的表達式
在C語言中,表達式是由操作符和操作數組成。表達式可以由一個或者多個操作數組成,不同的操作符與操作數組成不同的表達式,因此,表達式才是C語言的基本。
2023-02-21 15:09:23586
Linux內核中C語法擴展-語句表達式
表達式和語句是 C 語言中的基礎概念。什么是表達式呢?表達式就是由一系列操作符和操作數構成的式子。操作符可以是 C 語言標準規定的各種算術運算符、邏輯運算符、賦值運算符、比較運算符等。
2023-02-17 09:30:432138
STM32中比較常見的C語言基礎知識介紹
在不改變其他位的值的狀況下,對某幾個位進行設值。這個場景在單片機開發中經常使用,方法就是我們先對需要設置的位用&操作符進行清零操作,然后用 | 操作符設值。
2023-02-05 11:50:55350
STM32中較為常見的C語言基礎知識
C語言是單片機開發中的必備基礎知識,本文列舉了部分 STM32 學習中比較常見的一些C語言基礎知識。 1位操作 下面我們先講解幾種位操作符,然后講解位操作使用技巧。C語言支持以下六種位操作: 下面
2023-02-03 01:21:101220
C++入坑指南
C++最主要的用途是開發基礎軟件設施,和在有限資源的條件上運行的應用程序。因為它有一種獨特的能力,可以直接操作它所運行的硬件或者機器,即使在硬件空間資源受限的情況下,C++程序依舊可以高效的運行,所以在這種條件下,C++幾乎是完美的選擇。
2023-01-04 15:56:24268
C++中前置操作性能一定優于后置操作?
自入行以來,無論是查閱資料、技術博客亦或是同事間的技術交流,都有一個共識:在循環的時候,務必使用前置操作符,因為其性能優于后置操作符,久而久之,這個就像一個不成文的規定,大家都在遵循,久而久之,成為潛移默化的編碼習慣。而使得大家持有這個觀點的原因就是后置操作會產生臨時變量,而后置操作則不會。
2022-11-17 11:58:40270
C語言位操作
目錄前言一、位操作符及其常用方式二、實例應用解析(嵌入式筆試常考)前言 位操作在單片機的C語言開發中經常會用到,該操作主要用于讀寫寄存器,這篇文章將會對其的常用方法進行簡要概述。一、位操作符及其
2021-12-22 19:09:5512
嵌入式C語言常用知識點
導讀C 語言是單片機開發中的必備基礎知識。我們這里就列舉部分STM32學習中會遇見的C 語言基礎知識點1.位操作下面我們先講解幾種位操作符,然后講解位操作使用技巧。C語言支持如下6中位操作:(圖1
2021-11-29 17:06:055
C++輸入和輸出的真實面目
C++輸入和輸出 在C++里std::cin、std::cout、std::cerr和std::endl分別是標準輸入、標準輸出、標準錯誤輸出和刷新緩沖區并換行,它們都在命名空間std中,那么它們
2021-09-29 15:22:391335
在C++中如何用虛函數實現多態
01 — C++虛函數探索 C++是一門面向對象語言,在C++里運行時多態是由虛函數和純虛函數實現的,現在我們看下在C++中如何用虛函數實現多態。先來看一段代碼
2021-09-29 14:18:491293
C++之操作重載符學習的總結(二)
復數的概念可以通過自定義類實現;復數中的運算操作可以通過操作符重載實現;賦值操作符只能通過成員函數實現;操作符重載的本質為函數定義。
2020-12-24 16:26:46294
用HDL代碼描述加法運算要用操作符“+” 看似很簡單實則不然
采用HDL代碼描述加法運算只需要用操作符+即可,這看似很簡單,這里我們以兩個4-bit數相加為例,對輸入/輸出數據均寄存,從而形成如下圖所示電路。 此電路對應的HDL代碼如下圖所示。這里采用
2020-09-24 14:31:151821
C語言的sizeof操作符基礎和經典問題
在C語言中,sizeof是一個操作符(operator),而不是函數!其用于判斷數據類型或者表達式長度(所占的內存字節數)。其有兩種表達形式:
2020-04-04 17:39:002179
Linux中命令鏈接操作符的實際應用
Linux命令中的鏈接的意思是,通過操作符的行為將幾個命令組合執行。Linux中的鏈接命令,有些像你在shell中寫短小的shell腳本,并直接在終端中執行。鏈接使得自動處理變得更方便。
2019-05-06 17:44:00665
C++程序設計教程之運算符重載的詳細資料說明
本文檔詳細介紹的是C++程序設計教程之運算符重載的詳細資料說明主要內容包括了:1. 什么是運算符重載,2. 運算符重載的方法,3. 重載運算符的規則,4. 運算符重載函數作為類成員函數和友元函數
2019-03-14 16:04:004
C++程序設計教程之數據類型與表達式的詳細資料說明
本文檔的主要內容詳細介紹的是C++程序設計教程之數據類型與表達式的詳細資料說明包括了:1 . C++的數據類型,2 . 常量,3 . 變量,4 . C++的運算符,5 . 算術運算符與算術表達式,6 . 賦值運算符與賦值表達式,7. 逗號運算符與逗號表達式
2019-03-14 14:48:250
C++程序設計教程之類的詳細資料說明
) , 3.操作符 ( Operators ) , 4.再論程序結構 ( Program Struture Restatement ), 5.屏蔽類的實現 ( Shield Class Implementations ) , 6.靜態成員 ( Static Members ) ,7.友元 ( Friends )
2019-02-22 09:44:002
Visual C++教程之C++的語言資料概述免費下載
本文檔詳細介紹的是Visual C++教程之C++的語言資料概述免費下載主要內容包括了:1 從C到C++的程序結構 ,2 程序書寫規范,3 數據類型,4 運算符和表達式,5 基本語句 ,6 函數,7 指針和引用,8 作用域和存儲類型 ,9 預處理
2019-02-15 15:59:353
C++入門教程之數據類型、運算符和表達式的詳細資料說明
本文檔的詳細介紹的是C++入門教程之數據類型、運算符和表達式的詳細資料說明。主要內容包括了:
基本數據類型
常量和變量
輸入輸出
運算符和表達式
數據類型的轉換
構造數據類型
2019-02-15 11:26:172
VISUAL C++教程之VISUAL C++的安裝和使用方法
本文檔的主要內容詳細介紹的是VISUAL C++教程之VISUAL C++的安裝和使用方法資料免費下載。
2018-12-27 16:32:1618
如何快速入門運維?了解Linux中的10個命令鏈接操作符
Linux命令中鏈接的意思是,通過操作符的行為將幾個命令組合執行。Linux中的鏈接命令,有些像你在shell中寫短小的shell腳本,并直接在終端中執行。鏈接使得自動處理變得更方便。不僅如此,一個無人看管的機器在鏈接操作符的幫助下能夠十分有條理地運行。
2018-10-03 19:33:002769
關于Tcl中的數學運算
expr命令所支持的計算操作符是C語言中操作符的一個子集,并且寫法、優先級也和C語言中的完全一致,包括基本計算符(加、減、乘、除、取余)、關系運算符、邏輯運算符、移位運算符、按位邏輯運算符和三重
2018-09-04 10:22:148573
C++語法的外圍基礎
程序對內存空間的動態分配的頻繁程度要求簡化語言的相關語法的格式。C++語法規定new算符等效于C語言中mal1oc一類的函數功能;free算符等效于C語言中free一類的函數功能。其格式為: 指向對應類型的指針=new 類型描述符; delete 指向對應類型的指針;
2018-03-15 16:55:3210
條件運算符的用法_C運算符的結合方向
條件運算符優先級高于賦值、逗號運算符,低于其他運算符。在標準C語言的文檔里,對操作符的結合性并沒有作出非常清楚的解釋。一個滿分的回答是:它是仲裁者,在幾個操作符具有相同的優先級時決定先執行哪一個
2018-02-24 16:36:339257
Linux中的鏈接操作符可降低系統負載、寫出更加簡短有意義的代碼
鏈接使得自動處理變得更方便,不僅如此,一個無人看管的機器在鏈接操作符的幫助下能夠十分有條理地運行。
2017-12-22 11:52:141296
分享java虛擬機原理圖解
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特征去掉了,這些特征是一般程序員很少使用的。例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。Java還剔除了C++的操作符過載
2017-12-01 15:20:052256
C++內存泄漏分析方法
C++是一種非常流行的計算機編程語言,在使用的過程中容易出現內存泄漏問題,而該問題往往難以識別。給出了一種對C++內存泄漏問題進行分析的方法,該方法得到C++源代碼的抽象語法樹,從抽象語法樹中提
2017-11-23 11:19:035
Verilog HDL程序設計例程
【例 3.1】4 位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule
2011-09-07 16:16:28176
華為內部員工培訓資料-C++課件
C++語言中級教材講授C++語言的運用技術,包括:類、對象之間的關系、對象的存儲與布局、運算符重載、智能指針、仿函數、泛型編程,C++模式設計基本思想。
目 &n
2008-10-16 14:10:23286
密碼編碼學(加密方法的C與C++實現) pdf第二版
密碼編碼學(加密方法的C與C++實現)分分三個部分。第一部分描述密碼學中的常用算法和數論算法,以及這些算法的C和C++程序實;第二部分描述密碼算法的C和C++實現,主要包括RSA系
2008-09-25 09:49:06250
評論
查看更多