在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ 克魯斯卡爾算法 下
hash表
單詞統(tǒng)計
鏈表排序
查找
可變參數(shù)
爬樓梯
內(nèi)存
prim算法 中
線性結(jié)構(gòu)的處理
數(shù)據(jù)選擇
prim算法 上
循環(huán)單向鏈表
基數(shù)排序
堆排序
鏈表重合
排序二叉樹的保存和加載
圖添加和刪除
排序二叉樹線索化
非遞歸排序
字符串查找 下篇
鏈表逆轉(zhuǎn)
函數(shù)堆棧顯示
遞歸和堆棧
二叉樹深度遍歷
線性隊列
循環(huán)和遞歸
快速排序
尋找丟失的數(shù)
A*算法
克魯斯卡爾算法 下
排序二叉樹
大數(shù)計算
二叉樹廣度遍歷
prim算法 下
洗牌算法
圖結(jié)構(gòu)
最大公約數(shù)、最小公倍數(shù)
圖創(chuàng)建
雙向鏈表
字符串查找 上篇
尋路
通用算法的編寫
哈夫曼樹 下
線性堆棧
八皇后
排序二叉樹刪除-1
挑選最大的n個數(shù)
字符串查找 中篇
哈夫曼樹 上
合并排序
回數(shù)
選擇排序
哈希二叉樹
通用數(shù)據(jù)結(jié)構(gòu)
“數(shù)星星”
單向鏈表
排序二叉樹插入
圖的保存
排序二叉樹刪除-2
排序二叉樹刪除-3
n!中末尾零的個數(shù)統(tǒng)計

克魯斯卡爾算法 下

克魯斯卡爾算法是計算最小生成樹的一種算法。和prim算法(,,)按照節(jié)點進行查找的方法不一樣,克魯斯卡爾算法是按照具體的線段進行的?,F(xiàn)在我們假設(shè)一個圖有m個節(jié)點,n條邊。首先,我們需要把m個節(jié)點看成m個獨立的生成樹,并且把n條邊按照從小到大的數(shù)據(jù)進行排列。在n條邊中,我們依次取出其中的每一條邊,如果發(fā)現(xiàn)邊的兩個節(jié)點分別位于兩棵樹上,那么把兩棵樹合并成為一顆樹;如果樹的兩個節(jié)點位于同一棵樹上,那么忽略這條邊,繼續(xù)運行。等到所有的邊都遍歷結(jié)束之后,如果所有的生成樹可以合并成一條生成樹,那么它就是我們需要尋找的最小生成樹,反之則沒有最小生成樹。

上面的算法可能聽上去有些費解,我們可以用一個示例說明一下,

/*
*          9
*    D -----------
*  3 |           |
*    |      6    |
*    A  -------  B
*    |           |
*    |   7       | 5
*    -------C----
**/

現(xiàn)在有這么4個點。其中 A-D 為3, A-C為7,A-B為6,B-D為9,B-C為5,下面就開始計算,我們首先默認所有的點都是單獨的最小生成樹,

/*
*
*    D
*
*    A           B
*
*          C
**/

第一步,按照從小到大的順序,我們加入最小的邊A-D,

/*
*
*    D
*  3 |
*    |
*    A           B
*
*
*           C
**/

然后,我們發(fā)現(xiàn)下面最小的邊是B-C,

/*
*
*    D
*  3 |
*    |
*    A           B
*                |
*                | 5
*           C----
**/

接著,我們發(fā)現(xiàn)最小的邊是A-B,因為點A和點B位于不同的最小生成樹上面,所以繼續(xù)合并,

/*
*    D
*  3 |
*    |     6
*    A---------- B
*                |
*                | 5
*           C----
**/

接下來,我們還會遍歷A-C,B-D,但是我們發(fā)現(xiàn)此時邊的節(jié)點都已經(jīng)遍歷過了,所以均忽略,最小生成樹的結(jié)構(gòu)就是上面的內(nèi)容。

那么最小生成樹的數(shù)據(jù)結(jié)構(gòu)是什么,應(yīng)該怎么定義,不知道朋友們還記得否?我們曾經(jīng)在prim算法中討論過,

/* 直連邊 */
typedef struct _DIR_LINE
{
    int start;
    int end;
    int weight;
    struct _DIR_LINE* next;
}DIR_LINE;

/* 最小生成樹 */
typedef struct _MINI_GENERATE_TREE
{
    int node_num;
    int line_num;
    int* pNode;
    DIR_LINE* pLine;
}MINI_GENERATE_TREE;

/* 節(jié)點邊信息 */
typedef struct _LINE
{
    int end;
    int weight;
    struct _LINE* next;
}LINE;

/*節(jié)點信息*/
typedef struct _VECTEX
{
    int start;
    int number;
    LINE* neighbor;
    struct _VECTEX* next;
}VECTEX;

/* 圖信息 */
typedef struct _GRAPH
{
    int count;
    VECTEX* head;
}GRAPH;
上一篇:排序二叉樹線索化下一篇:A*算法