最小生成树
来源:互联网 发布:windows桌面插件api 编辑:程序博客网 时间:2024/06/10 06:49
根据大话数据结构整理:
/***********************************输入:邻接矩阵vMatrix/边表vEdge*输出:最小生成树***********************************/#include <iostream>#include <vector>#include <algorithm>using namespace std;#define INF 65535/*********Prim*************/void Prim(vector<vector<int>> &vMatrix){ vector<int> adjvex(vMatrix.size() + 1); vector<int> lowcost(vMatrix.size() + 1); for (unsigned i = 1; i < vMatrix.size(); i++) lowcost[i] = vMatrix[0][i]; for (unsigned i = 1; i < vMatrix.size(); i++) { int min = INF; unsigned j = 1, k = 0; while (j < vMatrix.size()) { if (lowcost[j] != 0 && lowcost[j] < min) { min = lowcost[j]; k = j; } j++; } cout << adjvex[k] << " " << k << endl; lowcost[k] = 0; for (j = 1; j < vMatrix.size(); j++) { if (lowcost[j] != 0 && lowcost[j] > vMatrix[k][j]) { lowcost[j] = vMatrix[k][j]; adjvex[j] = k; } } }}/*********Kruskal****************/struct CEdge{ int begin; int end; int weight;};bool sortEdge(CEdge a, CEdge b){ return a.weight < b.weight;}int Find(vector<int> &parent, int f){ while (parent[f]>0) f = parent[f]; return f;}void Kruskal(vector<CEdge> &vEdge, int nodeNum){ vector<int> parent(nodeNum + 1); for (unsigned i = 0; i < vEdge.size(); i++) { int n = Find(parent, vEdge[i].begin); int m = Find(parent, vEdge[i].end); if (n != m) { parent[n] = m; cout << vEdge[i].begin << " " << vEdge[i].end << " " << vEdge[i].weight << endl; } }}/*********主函数****************/int main(){ int nodeNum, N, data1, data2, data3; cin >> nodeNum >> N; /******建立邻接矩阵**********/ vector<vector<int>> vMatrix(nodeNum, vector<int>(nodeNum, INF)); for (int j = 0; j < nodeNum; j++) vMatrix[j][j] = 0; /*******建立权值边***************/ vector<CEdge> vEdge(N); for (int i = 0; i < N; i++) { cin >> data1 >> data2 >> data3; vMatrix[data1][data2] = data3; vMatrix[data2][data1] = data3; vEdge[i].begin = data1; vEdge[i].end = data2; vEdge[i].weight = data3; } cout << "Prim最小生成树: " << endl; Prim(vMatrix); cout << "Kruskal最小生成树: " << endl; sort(vEdge.begin(), vEdge.end(), sortEdge); Kruskal(vEdge, nodeNum); return 0;}/*case:顶点数n,边数m,m条边*//*9150 1 100 5 111 2 181 8 121 6 162 3 222 8 83 4 203 7 163 6 243 8 214 5 264 7 75 6 176 7 19*/
阅读全文
0 0
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- ScrollView和ListView滑动冲突
- C语言变长参数
- 接口加密实现
- 我的路子
- C++ Primer Notes(14)
- 最小生成树
- iOS风格 年月日 选择器
- 使用DOM和java反射实现简单的SpringIOC
- 排序算法5
- opencv基础
- java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries
- [笔记分享] [Build] Android编译系统源代码之main.mk
- 安卓扫描银行卡获取卡号信息
- 阿拉伯数字转大写汉子