C語言資料結構克魯斯卡爾演算法 求最小生成樹

2021-09-24 04:12:22 字數 1488 閱讀 8253

/*

*克魯斯卡爾演算法

*得到圖的最小生成樹

*構造乙個無向網的的鄰接矩陣

*建立乙個臨時陣列

*對edge陣列進行排序

*/

#include#include#includetypedef char* vertextype;//頂點的資訊的資料型別

typedef int arctype;//權重胡資料型別

#define vertexnum 100//最大頂點數

#define max_int 32726 //權重的無限大取值

#define ok 1

#define error 0

typedef struct edge

edge[vertexnum],edg;//建立邊的陣列

edge edge;

typedef struct

algraph;//無向網的結構體

void test();//測試函式

int create_algraph(algraph *g);//建立無向網

int locate_vex(algraph *g,vertextype vex);//定位函式

void sort_array(algraph *g);//對權重進行排序

//克魯斯卡爾演算法

void main()

int create_algraph(algraph *g)//建立無向網

//初始化頂點資訊

for(i=0;in;i++)

//初始化邊的資訊

for(i=0;ie;i++)

else

}return ok;

}int locate_vex(algraph *g,vertextype vex)//定位函式

else

index++;

} return (index==g->n ? -1 : index);

}void test()//定位函式

result=create_algraph(g);

if(result==error)

printf("列印無向網的結果為:\n");

printf("\t");

for(i=0;in;i++)//輸出第一行頂點的資料

printf("\t%s",g->vexs[i]);

printf("\n");//換行

for(i=0;in;i++)

printf("\n");

}printf("通過克魯斯卡爾得到的最小生成樹為:\n");

minipantree_kruskal(g);

}void sort_array(algraph *g)//對權重進行排序

if(k!=i)

} return edge;

}//克魯斯卡爾演算法的核心環節

void minipantree_kruskal(algraph*g)//演算法核心環節}}

}

C語言 資料結構 克魯斯卡爾kruskal

include include include ljjz.h 求解最小生成樹演算法 typedef struct edgedata edge 對邊向量快速排序 邊向量edges邊向量左右下標left right void quicksort edge edges,int left,int right...

c語言克魯斯卡爾演算法

我們用鄰接矩陣來表示該圖,克魯斯卡爾演算法思想及找到最小邊,檢視是否形成迴路,若形成迴路則這條邊不形成,若不形成迴路則構成最小路徑,以此類推。思路和 都在下方 建立乙個edge陣列,存放鄰接矩陣的有用資料 typedef struct edge int n g numvertices edge ed...

克魯斯卡爾演算法

測試輸入包含若干測試用例。每個測試用例的第1行給出評估的道路條數 n 村莊數目m 100 隨後的 n 行對應村莊間道路的成本,每行給出一對正整數,分別是兩個村莊的編號,以及此兩村莊間道路的成本 也是正整數 為簡單起見,村莊從1到m編號。當n為0時,全部輸入結束,相應的結果不要輸出。對每個測試用例,在...