?? 克魯斯卡爾算法.cpp
字號:
# include<iostream.h>
typedef struct { // 邊的數據結構
float key; // 邊的權
int u; // 與邊關聯的頂點編號
int v; // 與邊關聯的頂點編號
} EDGE;
typedef struct node { // 頂點的數據結構
struct node *p; // 指向父親結點
int rank; // 結點的秩
int u; // 頂點編號
};
typedef struct node NODE;
EDGE E[ m + 1 ], T[ n ]; // 圖的邊集及生成樹
NODE V[ n ]; // 圖的頂點集合
void main ()
{
}
void kruskal (NODE V[],EDGE E[],EDGE T[],int n,int m)
{
int i,j,k;
EDGE e;
NODE *u,*v;
make_heap(E,m);//用邊集構成最小堆
for (i=0;i<n;i++){ //每個頂點都作為樹的根結點,構成森林
V[i].rank=0;V[i].p=NULL;
}
i = j = 0;
while ((i<n-1) && (m>0) {
e = delete_min(E, &m); // 從堆中取下權最小的邊
u = find(&V[ e.u ]); // 檢索該邊兩頂點所在
v = find(&V[ e.v ]); // 樹根
if (u != v) { // 兩頂點不在同一棵樹
union(u, v); // 合并成一棵樹
T[ j++ ] = e; // 該邊置于生成樹中
i++;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -