最小生成树
来源:互联网 发布:广告行业数据分析 编辑:程序博客网 时间:2024/06/05 15:54
prim算法
对这种有记忆性质的变量(在外面定义,循环时会记录上次的值,类似于全局变量),每次使用都要小心,注意初始化问题!!!
#include <iostream>using namespace std;const int N = 6;/*int e[N][N]={ {0,6,1,5,9999,9999}, {6,0,5,9999,3,9999}, {1,5,0,5,6,4}, {5,9999,5,0,9999,2}, {9999,3,6,9999,0,6}, {9999,9999,4,2,6,0}}*///图,注意此图是无向图,关于对角线对称的。int e[N][N]={ {9999,6,1,5,9999,9999}, {6,9999,5,9999,3,9999}, {1,5,9999,5,6,4}, {5,9999,5,9999,9999,2}, {9999,3,6,9999,9999,6}, {9999,9999,4,2,6,9999}};//图,注意此图是无向图,关于对角线对称的。int dist[N];//各点距离生成树的距离int book[N] = {0};//标记各节点是否选入生成树;int sum = 0;int prim(){ for (int i = 0; i < N; ++i) { dist[i] = e[0][i]; } book[0] = 1; int tmp; int minIndex; for (int l = 0; l < N-1; ++l) { tmp = 99999;//第一次忘了在此处初始化tmp, tmp会记录上次运算的值,不初始化有可能在下面的循环里得不到更新minIndex的值,因此此处需要初始化。 // TODO对这种有记忆性质的变量(在外面定义,循环时会记录上次的值,类似于全局变量),每次使用都要小心,注意初始化问题!!! for (int j = 0; j < N; ++j) { if (tmp > dist[j] && !book[j]) { tmp = dist[j]; minIndex = j; } } book[minIndex] = 1; sum += dist[minIndex]; for (int k = 0; k < N; ++k) { if(!book[k]) {// cout << dist[4] <<" " << e[1][4] <<endl;//开始的时候输入数组输错了,浪费了很多时间,以后拍错先看输入是否正确,然后考虑边界,然后考虑逻辑 if (dist[k] > e[minIndex][k]) dist[k] = e[minIndex][k]; } } } return sum;}int main() { cout << prim() << endl; return 0;}
0 0
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 主流图片加载框架ImageLoader、Glide、Picasso、Fresco性能分析---内存占用比较
- 傲慢与偏见。你所不知道的select()——The C10M Problem
- [C#编程手册]枚举类型
- Linux上创建和更改硬链接和符号链接
- Struts2拦截器原理简介
- 最小生成树
- The Concept of Indistinguishability under Chosen Plaintext Attack (IND-CPA)
- JAVA程序员一定知道的优秀第三方库(2016版)
- 292. Nim Game--LeetCode Record
- CMake 入门介绍和实例
- 20160706
- STM32 之GPIO
- Jekyll搭建本地环境
- 简单题:不等式(知道了运算符号算是字符可以定义为char类型)待解决