為什麼要構建最小生成樹呢?其實原理很簡單。打個比方,現在某乙個鄉鎮有n個村,那麼這n個村肯定是聯通的。現在我們打算在各個村之間搭建網線,實現村村通的工程。那麼有什麼辦法可以實現村村互通,同時又使得最後的總距離最小呢?要達到這個目的,就必須在已有的圖中構建最小生成樹。
生成最小生成樹的方法很多,prim方法就是其中的一種。那麼生成最小生成樹的基本步驟是什麼呢?很簡單,聽我慢慢道來:
1)以某乙個點開始,尋找當前該點可以訪問的所有的邊;
2)在已經尋找的邊中發現最小邊,這個邊必須有乙個點還沒有訪問過,將還沒有訪問的點加入我們的集合,記錄新增的邊;
3)尋找當前集合可以訪問的所有邊,重複2的過程,直到沒有新的點可以加入;
4)此時由所有邊構成的樹即為最小生成樹。
a)首先,我們定義基本的資料結構。
[cpp]view plain
copy
typedef
struct
_dir_line
dir_line;
typedef
struct
_mini_generate_tree
mini_generate_tree;
b)dir_line的基本操作
[cpp]view plain
copy
status insert_line_into_queue(dir_line** ppline,
intstart,
intend,
intweight)
pline = create_new_dir_line(start, end, weight);
pline->next = *ppline;
*ppline = pline;
return
true;
} status delete_line_from_queue(dir_line** ppline, dir_line* pline)
prev = *ppline;
while
(pline != prev->next)
prev = prev->next;
prev->next = pline->next;
final:
free(pline);
return
true;
}
前面我們討論了圖的建立、新增、刪除和儲存等問題。今天我們將繼續討論圖的一些其他問題,比如說如何在圖的環境下構建最小生成樹。為什麼要構建最小生成樹呢?其實原理很簡單。打個比方,現在某乙個鄉鎮有n個村,那麼這n個村肯定是聯通的。現在我們打算在各個村之間搭建網線,實現村村通的工程。那麼有什麼辦法可以實現村村互通,同時又使得最後的總距離最小呢?要達到這個目的,就必須在已有的圖中構建最小生成樹。
生成最小生成樹的方法很多,prim方法就是其中的一種。那麼生成最小生成樹的基本步驟是什麼呢?很簡單,聽我慢慢道來:
1)以某乙個點開始,尋找當前該點可以訪問的所有的邊;
2)在已經尋找的邊中發現最小邊,這個邊必須有乙個點還沒有訪問過,將還沒有訪問的點加入我們的集合,記錄新增的邊;
3)尋找當前集合可以訪問的所有邊,重複2的過程,直到沒有新的點可以加入;
4)此時由所有邊構成的樹即為最小生成樹。
那麼,**應該怎麼編寫呢?朋友們可以自己好好思考一下。
a)首先,我們定義基本的資料結構。
[cpp]view plain
copy
typedef
struct
_dir_line
dir_line;
typedef
struct
_mini_generate_tree
mini_generate_tree;
b)dir_line的基本操作
[cpp]view plain
copy
status insert_line_into_queue(dir_line** ppline,
intstart,
intend,
intweight)
pline = create_new_dir_line(start, end, weight);
pline->next = *ppline;
*ppline = pline;
return
true;
} status delete_line_from_queue(dir_line** ppline, dir_line* pline)
prev = *ppline;
while
(pline != prev->next)
prev = prev->next;
prev->next = pline->next;
final:
free(pline);
return
true;
}
Prim 演算法的實現
最小生成樹除了prim還有kruskal演算法。prim演算法的實現,用到了優先佇列。include include include include include include include include include using namespace std 邊表 class edgeno...
prim演算法的實現
新增鏈結描述 執行了一下prim 演算法 覺得這個程式還可以 後期可以在此基礎上做較大的改動 故此分享了這個 include define maxvex 10 define true 1 define false 0 define inf 65535 此處是權值極大值 define length a...
Prim演算法實現
include stdio.h define max vertex num 20 typedef struct arccellarccell,adjmatrix max vertex num max vertex num typedef struct mgraph struct closedge m...