/*
*克魯斯卡爾演算法
*得到圖的最小生成樹
*構造乙個無向網的的鄰接矩陣
*建立乙個臨時陣列
*對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時,全部輸入結束,相應的結果不要輸出。對每個測試用例,在...