主要代碼如下:? ? #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:14
179


Linux命令中“!”操作符的用法
Linux中的'!'符號或操作符可以用作邏輯否定運算符,也可以用于在歷史記錄中獲取命令并進行修改或運行以前執行過的命令。
2023-07-05 10:07:15
1003

DC-DC的輸入電容Cin和輸出電容Cout計算選型
實際上DC-DC的輸入電容Cin和輸出電容Cout是特別關鍵的器件,在負載波動大影響Vin時,Cin不僅可以輔助Vin提供電流,縮短Vin的響應時間,還可以穩定輸入電壓Vin。而Cout更為關鍵。
2023-07-01 12:53:45
502


如何計算DC-DC的輸入電容Cin與輸出電容Cout
引言:實際上DC-DC的輸入電容Cin和輸出電容Cout是特別關鍵的器件,在負載波動大影響Vin時,Cin不僅可以輔助Vin提供電流,縮短Vin的響應時間,還可以穩定輸入電壓Vin。而Cout更為
2023-06-15 15:14:06
775


new和malloc函數詳細分析底層邏輯
new操作符從自由存儲區(free store)上為對象動態分配內存空間,而malloc函數從堆上動態分配內存。自由存儲區是C++基于new操作符的一個抽象概念,凡是通過new操作符進行內存申請,該
2023-04-03 09:29:01
280

C++入門之表達式
C++中提供了很多操作符且定義了什么時候可以用于操作基本類型,其還允許我們定義用于操作class類型的操作符,接下來幾篇文章將會介紹C++中用于基本類型的操作符,與此同時也會介紹一些庫中操作符。一個
2023-03-17 13:55:04
249

C語言的表達式
在C語言中,表達式是由操作符和操作數組成。表達式可以由一個或者多個操作數組成,不同的操作符與操作數組成不同的表達式,因此,表達式才是C語言的基本。
2023-02-21 15:09:23
586


Linux內核中C語法擴展-語句表達式
表達式和語句是 C 語言中的基礎概念。什么是表達式呢?表達式就是由一系列操作符和操作數構成的式子。操作符可以是 C 語言標準規定的各種算術運算符、邏輯運算符、賦值運算符、比較運算符等。
2023-02-17 09:30:43
2138

STM32中比較常見的C語言基礎知識介紹
在不改變其他位的值的狀況下,對某幾個位進行設值。這個場景在單片機開發中經常使用,方法就是我們先對需要設置的位用&操作符進行清零操作,然后用 | 操作符設值。
2023-02-05 11:50:55
350

評論