- 博客(9)
- 收藏
- 关注
原创 汉诺塔问题的解决思路及算法
关于汉诺塔问题,好多时候当时理解了过段时间可能又会忘,其实这个代码很简单,主要还是分治思想理解不够透彻。架设3根柱子分别为A、B、C,圆盘数目为n。1:如果A有一个圆盘,则直接移动至c。2:如果A有2个圆盘,则A->B,A->C,B->C。好了这个时候已经可以解决问题了,结束条件为 n==1;假设当我们在数目为n-1的时候已经解决了移动问题可以成功移动至C,如果又多了一个呢,即
2017-12-31 21:25:27 19913
原创 floyd算法求多源最短路径
关于floyd三重循环的问题可能有人有疑问:为什么k要放在在外层循环,这个牵扯到动态规划的问题,状态转移方程为dist[k][a][b] = min(dist[k-1][a][k] + dist[k-1][k][b] , dist[k-1][a][b]),当多使用了一个中间节点k来更新ab间距离的时候,需要知道k-1的时候对应的所有的ab间距,才能推导出新增k节点之后的所有ab间距,所以要把k=1
2017-12-30 22:27:56 206
原创 图的存储(邻接表)创建与深度优先、广度优先搜索
#pragma once#include#includeusing namespace std;#define Vnum 10typedef int DATA;/*邻接表存储图*/typedef struct list //存储链表的结构{ int weight; //边 int index; //顶点数组的索引 struct list *nextList; //链表的
2017-12-30 20:22:01 880
原创 二叉树的存储,创建,以及四种遍历,删除
#include ;#include ;using namespace std;typedef char DATA;typedef struct BitTree{ DATA data; BitTree *lChild, *rChild;}BitTree, *BitNode;class CBitTree{public: BitTree* node; CBitTree()
2017-12-28 14:11:39 226
原创 归并排序算法理解
归并排序算法的思想:把一个序列拆分成一对序列,每个序列再次拆分,这样经过多次拆分,拆分成多个小序列,每个序列有2个以内的元素然后排序,再逐次把1对有序序列合并为一个有序序列,最后合并为一个完整的有序序列。void merge(int *data,int startIndex,int endIndex);void mergeSort(int *data,int startIndex,int
2017-12-27 13:59:57 200
原创 快速排序算法
快速排序算法的思想就是从数字序列中随便挑一个数,然后比跟剩余元素逐个比较,比它小的放在它的左边,比它大的放在它右边,然后这个数的位置就坐定了,然后分别取这个数左边的所有元素组成的新序列,还有右边的新序列,也就是左序列和右序列。用以上方法来递归实现。但是为了不浪费空间,总不能真的每个左序列和右序列都重新创建一个新的数组,可以通过记录原序列中的左序列右序列起始位置与结尾位置来实现,至于2个位置元素的交...
2017-12-27 12:56:09 116
原创 10进制转2进制问题
其实在计算机的逻辑里,只有2进制,10进制转2进制的意思是把计算机展示给我们的10进制(数字)转换为 2进制(字符串)。既然写转换,就写个优雅简洁的代码,号称史上最简(贱)。void ten2two(int num){ while(num) { cout<< (num & 1 ?1 : 0); num >>= 1; }}
2017-12-27 12:41:52 278
原创 关于矿泉水空瓶子和瓶盖兑换矿泉水的问题解决算法
问题大概描述:矿泉水1块钱1瓶,喝完以后,2个空瓶子可以换一瓶新矿泉水,4个瓶盖也可以换一瓶新矿泉水。问:花10块钱最后最多能得多少瓶矿泉水。钱不是问题,主要是考虑刚开始能买多少瓶矿泉水,这里是10瓶,既然写程序,就n瓶吧。大致思路如下:先把n个矿泉水全部拆分成空瓶和盖子,就是当前拥有的所有的空瓶和盖子。可以用while循环,结束条件是(经过一轮瓶子和瓶盖的兑换活动后)当前的兑换后
2017-12-27 12:08:57 6552
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人