Prim’s Minimum Spanning Tree
来源:互联网 发布:夜访吸血鬼电影知乎 编辑:程序博客网 时间:2024/05/01 07:25
#include "stdafx.h"#include "stdio.h"#include "iostream"#include "string"#include "sstream"#include "cmath"using namespace std;struct islands{int x;int y;};class route{public:int numi;float E;bool *sset;route();route(int n, float e);islands *isd;int **distmatrix;long sum;void addislands(int coor, int num, char c);void printoutislands();void printoutdistmatrix();void compdistmat();void connected();bool allcon();void prim();int min();int *mindis;~route(){delete[] isd;delete[] sset;for (int i = 0; i < numi; i++)delete[] distmatrix[i];delete[] distmatrix;}islands start;};void route::addislands(int coor, int num, char c){if (c == 'x'){isd[num].x = coor;sset[num] = 0;mindis[num] = INT_MAX;}else{isd[num].y = coor;}};route::route(int n, float e){this->numi = n;this->E = e;isd = new islands[n];sset = new bool[n];mindis = new int[n];}void route::printoutislands(){for (int i = 0; i < numi; i++){cout << isd[i].x << " ~ " << isd[i].y << endl;}}void route::printoutdistmatrix(){for (int i = 0; i < numi; i++){for (int j = 0; j < numi; j++){cout << distmatrix[i][j] << " ";}cout << endl;}}void route::compdistmat(){distmatrix = new int*[numi];for (int i = 0; i < numi; i++){distmatrix[i] = new int[numi];for (int j = 0; j < numi; j++){distmatrix[i][j] = sqrt(pow((isd[i].x - isd[j].x), 2) + pow((isd[i].y - isd[j].y), 2));}}}int route::min(){int minIndex;int min = INT_MAX;for (int i = 0; i < numi; i++){if ((sset[i] == 0) && (mindis[i] < min)){min = mindis[i];minIndex = i;}}return minIndex;}void route::prim(){sset[0] = 1;for (int i = 0; i < numi; i++)mindis[i] = INT_MAX;mindis[0] = 0;sum = 0;for (int counter = 0; counter < numi-1; counter++){for (int u = 0; u < numi; u++){int tmpmin = INT_MAX;for (int v = 0; v < numi; v++){if ((sset[u] == 0) && (sset[v] == 1)){if (distmatrix[u][v] < tmpmin){mindis[u] = distmatrix[u][v];}}}}int tmp = min();sset[tmp] = 1;int tmpmin = INT_MAX;for (int v = 0; v < numi; v++){if ((sset[v] == 1)&&(v!=tmp)&&(distmatrix[tmp][v]<tmpmin)){tmpmin = distmatrix[tmp][v];}}sum = sum + tmpmin;}}int _tmain(int argc, _TCHAR* argv[]){int numi;float E;//cin >> numi;//cin.ignore();numi = 4;string linex;string liney;string tmp;//cin >> linex;//cin.ignore();//cin >> liney;//cin.ignore();//sample inputlinex = "0 0 400 400";liney = "0 100 0 100";//cin >> E;//cin.ignore();E = 1.0;route myroute(numi, E);istringstream strx(linex);int counter = 0;while (getline(strx, tmp, ' ')){int x = atoi(tmp.c_str());//cout << x << endl;myroute.addislands(x, counter, 'x');counter++;}counter = 0;istringstream stry(liney);while (getline(stry, tmp, ' ')){int y = atoi(tmp.c_str());//cout << y << endl;myroute.addislands(y, counter, 'y');counter++;}myroute.compdistmat();myroute.printoutislands();myroute.printoutdistmatrix();myroute.prim();cout << myroute.sum << endl;system("pause");return 0;}
0 0
- Prim’s Minimum Spanning Tree
- Prim's minimum spanning tree algorithm
- Minimum Spanning Tree (MST) -- Prim's Algorithm (c++实现)
- MST(Kruskal’s Minimum Spanning Tree Algorithm)
- Kruskal’s Minimum Spanning Tree Algorithm
- Minimum Spanning Tree.prim/kruskal(并查集)
- 最小生成树(Minimum Spanning Tree)(Prim算法)
- 最小生成树MST(Minimum Spanning Tree)-普里姆(Prim)算法
- Minimum Spanning Tree
- Minimum Spanning Tree SPOJ
- Geeks : Kruskal’s Minimum Spanning Tree Algorithm 最小生成树
- Kruskal’s Algorithm for finding Minimum Spanning Tree
- Minimum Spanning Trees - Prim’s algorithm & Single-Source Shortest Paths - Dijkstra’s algorithm
- HDU-4408-Minimum Spanning Tree
- hdu 4408 Minimum Spanning Tree
- hdu 1223 minimum spanning tree
- 《Boost》Part1 Minimum Spanning Tree
- [Lintcode] 629. Minimum Spanning Tree
- [OpenJudge-NOI]词典 stl
- 延迟函数setTimeout()和setInterval()
- 光棍节脱单,单身狗该你上了
- php把.sql文件导入到mysql数据库
- 计算几何 常用算法模版
- Prim’s Minimum Spanning Tree
- Java代码性能优化
- [OpenJudge-NOI]Set stl
- 排序算法比较
- C#.NET中遍历指定目录下的文件(及所有子目录及子目录里更深层目录里的文件)
- 命令行更新 android sdk
- 110 js ajax获取html元素并插入
- oracle ora-00904 标识符无效
- loadrunner中文乱码解决