Kruskal演算法(二)之 C++詳解
阿新 • • 發佈:2018-12-31
class MatrixUDG { #define MAX 100 #define INF (~(0x1<<31)) // 無窮大(即0X7FFFFFFF) private: char mVexs[MAX]; // 頂點集合 int mVexNum; // 頂點數 int mEdgNum; // 邊數 int mMatrix[MAX][MAX]; // 鄰接矩陣 public: // 建立圖(自己輸入資料) MatrixUDG(); // 建立圖(用已提供的矩陣) //MatrixUDG(char vexs[], int vlen, char edges[][2], int elen); MatrixUDG(char vexs[], int vlen, int matrix[][9]); ~MatrixUDG(); // 深度優先搜尋遍歷圖 void DFS(); // 廣度優先搜尋(類似於樹的層次遍歷) void BFS(); // prim最小生成樹(從start開始生成最小生成樹) void prim(int start); // 克魯斯卡爾(Kruskal)最小生成樹 void kruskal(); // 列印矩陣佇列圖 void print(); private: // 讀取一個輸入字元 char readChar(); // 返回ch在mMatrix矩陣中的位置 int getPosition(char ch); // 返回頂點v的第一個鄰接頂點的索引,失敗則返回-1 int firstVertex(int v); // 返回頂點v相對於w的下一個鄰接頂點的索引,失敗則返回-1 int nextVertex(int v, int w); // 深度優先搜尋遍歷圖的遞迴實現 void DFS(int i, int *visited); // 獲取圖中的邊 EData* getEdges(); // 對邊按照權值大小進行排序(由小到大) void sortEdges(EData* edges, int elen); // 獲取i的終點 int getEnd(int vends[], int i); };