05 2014 档案
摘要:参照书上写的Huffman树的代码 结构用的是线性存储的结构 不是二叉链表 里面要用到查找最小和第二小 理论上锦标赛法比较好 但是实现好麻烦啊 考虑到数据量不是很大 就直接用比较笨的先找最小 去掉最小再找第二小的方法了。#include #include #include typedef struc...
阅读全文
摘要:昨天写了个二叉树遍历,自以为对二叉树很了解了。自大的认为线索二叉树不过是加了点线索而已,不足挂齿。可是当真的自己编程序写的时候才发现完全不是那么容易。在有线索的情况下,如何判别Link类型的下一节点,如何不用栈跳过已访问节点搞得脑子晕晕的。 折腾一个晚上,才根据书上把线索二叉树的建立、中序遍历给写出...
阅读全文
摘要:先序遍历和中序遍历非递归代码:#include #include using namespace std;typedef struct BinaryTree { int data; struct BinaryTree *rchild, *lchild;}BinaryTree;int cr...
阅读全文
摘要:做了大半个月,终于把第一章做完了有的题遇到了不小的坎儿,看着网上一群高中生都做得那么好,心理还是有些小郁闷的。不禁感慨我过去的四年真是虚度啊。总结一下第一章学习到的知识吧。①闰年判断int isleapyear(int N){ if((N%100 != 0 && N%4 ==0) || (N%...
阅读全文
摘要:一看题目 经典的8皇后问题 不过是皇后数量可变而已 不用想 回溯法。 需要个生成每次可选择序列的函数, 在存储可选择的序列时按照先大后小的顺序排的。这样每次找最小和去掉最小都很方便,只要有个记录数量的变量 每次减1就好了。 写完后,居然悲剧了。 在皇后数量达到13时, 在自己电脑上跑 内存溢出了 在...
阅读全文
摘要:有了前面的基础,做这道题真是so easy啊。 因为要分解后每个数都是素数,所以采用先生成短的素数,长的素数在短素数的基础上生成。 比如长度为1的素数只有 2 3 5 7, 那么符合要求的长度为2的素数只可能是 21- 29 31-39 51-59 71-79 对其他长度类似。 答案的思路和我的差不...
阅读全文
摘要:开始看第一眼题就觉得问题会在超时上,果然写了个小代码运行到test 9时超时了#include #include int isprime(int M){ int i; float N = M; for(i = 2; i #include int isprime(int M){ ...
阅读全文
摘要:给一颗数字树,让找一条数字和最大的路径。一下子就想起刚学不久的回溯法了。照着写了个代码,调了调搞通了。在小数据的情况下是对的,但是在test 6 树有199层的时候溢出了。#include int BackTrack(int n, int (*num)[1000], int * summax) //...
阅读全文
摘要:这道题卡了很久,开始没读清楚题,没看到题目中给的6个组合是仅可能的组合,一直自己想有多少种组合方式。后来才发现,于是就想到写遍历。我想的是,这六种情况下,每个位置摆哪个矩形是不确定的,于是可以对方块的排列方法遍历,对每个方块是横放还是竖放遍历。写了一个9层的循环,效率很低,有非常多的重复。不过通过了...
阅读全文
摘要:没什么多说的。栈:后进先出,LIFO队列:先进先出, FIFO讲了递归时用到栈,和栈的顺序表示。队列讲了链式表示和循环队列(顺序表示)。实际上都可以用链式和顺序表示,看情况选吧。里面的例题都还挺不错的,自己做了一遍,都是按照书上的结构来的,现在才知道C++STL里都实现了这些功能了,直接调用就成.....
阅读全文
摘要:这一章虽然长,但因为我不太重视里面繁琐的计算过程所以也没有多少新东西。线性表中每个元素的类型是相同的。表示的方法有顺序映像的顺序表,实际上就是个一维数组,书上用了变长的存储方式;链式表示有线性链表,就是一个结点指向下一个结点,还有静态链表,就是用数组来实现链表,数组内要存储一个元素的位置。又讲了循环...
阅读全文
摘要:都是些定义,没什么需要过多注意的。只要知道几个概念就好:逻辑结构:数据结构中元素之间的关系物理结构/存储结构:数据结构在计算机中的表示。有两种:顺序存储结构(顺序映像)、链式存储结构(非顺序映像)
阅读全文
摘要:感觉数组这一段没讲什么太多的东西。先是讲了下定义,就是每个维度上都有对应的前驱后继,首尾元素例外。操作只有初始化 销毁 取元素 修改元素。然后讲了下适合用顺序存储结构,多维情况下根据下标(j1 j2 j3 ... jn)找到对应像素的存储位置 cn= L, ci-1= bi* ci, LOC = L...
阅读全文
摘要:倒牛奶的问题, 开始看感觉跟倒水的问题很像, 想直接找规律, 写个类似于循环取余的代码。 但后来发现不行,因为这道题有三个桶,水量也是有限制的。只好用模拟的方法把所有的情况都试一遍。建一个state[21][21][21]的数组存储出现过的状态。对于遍历状态,对每一种状态, 分别采用六种处理方法,若...
阅读全文
摘要:输入 : N M要找到长度为 N 的等差数列,要求数列中每个数字都可以表达成 a^2 + b^2 的和, 数字大小不超过M^2 + M^2输出: 等差数列首元素 间隔 (多组答案分行输出)解题思路:因为等差数列的数字都是平房和数 所以先生成所有的 从0 - M^2 + M^2的平方和数 去掉相同的并...
阅读全文
摘要://放在USACO上一直通不过 不知道哪里出了问题 输出的n总是等于1 但是BFS递归的次数是对的 《----这个问题解决了 局部变量压入queue中返回就是对的了#include#include #include#includeusing namespace std;typedef struct{...
阅读全文
摘要:关键:以回文中心位置为变量进行遍历//必须把纯字母先提出来 否则肯能会出现错误 比如: lvlv= 在检查长度4时 lvlv认为不是回文 vlv=认为是回文 但实际上 lvl 出现的要更早一些//判断回文的方法 可以输入字符串后 左右比较 或者分别正序 逆序 存储 判断是否相等//我的思路不对 严重...
阅读全文
摘要://开始傻×了 受题目形容的误导 一心想生成所有可能的 字符串组合 之后查找非常慢 //听了同学的 将5000个dict里的字符串 转换成char型数组(不能直接用int 会越界)直接用输入的数据对着转换后的数据查找就可以了 //现在的程序还是太复杂了 没有必要提前把dict中的字符串都存起来 取一...
阅读全文