BUPT-DSA 2019 Fall
Lupinus_Linn
如无特殊说明,本人的文章采用 CC BY-NC 4.0 (非商用,注明出处)协议共享,让我们一起学习,共同成长!
展开
-
BUPT-DSA 2019 Fall Chap.1 利用带头结点的链表实现多项式的乘法
利用带头结点的链表实现多项式的乘法(实际上不带头结点操作起来要方便一些) 由于使用了结构体的整体赋值,需要打开C++11语法,如果不想开也可以单独逐个赋值。 由polynomialMultiply()函数返回一个新的多项式,而不对输出的poly1和poly2做修改。 多用const是好习惯。 typedef struct _polynomial { int coef,expon; struct...原创 2019-10-07 09:35:15 · 183 阅读 · 0 评论 -
BUPT-DSA 2019 Fall Chap.3 推导n阶汉诺塔(梵塔)执行move步骤的次数
根据汉诺塔的递归定义 void hanoi(int n,...) if(n==1) move(1,...); else { hanoi(n-1,...); move(n,...); hanoi(n-1,...); } 由此可见,函数在n=1时执行一次move函数后退出,在非1时,执行一次move并执行两次n...原创 2019-10-07 09:38:07 · 1030 阅读 · 0 评论 -
BUPT-DSA 2019 Fall Chap.3 0-1背包问题
这实际上并不是标准的0-1背包问题,可以认为所有物品的价值都是1。而且也不是寻找最优解,而是输出所有可能的解,所以深度优先搜索(DFS)就显得格外合适。 全局区的变量会被自动置零,可以不用赋初值。 #include <cstdio> #define MAX 100 int solution_cnt;//解方案数 int bag_capacity;//包容量 int items_cnt,...原创 2019-10-07 09:45:42 · 124 阅读 · 0 评论 -
BUPT-DSA 2019 Fall Chap.3 八皇后问题
八皇后可以扩充到n皇后,注意DEGREE不要开的太大,因为解的数量增长非常快,八皇后才92,九皇后就有392组解了。 同样使用dfs。 #include <cstdio> #include <cmath> #define DEGREE 8//八皇后,可以改成其他阶数的 //数组使用自然下标[1,n],0号位空出 int result[DEGREE+1];//第i行的第re...原创 2019-10-07 09:54:45 · 132 阅读 · 0 评论 -
BUPT-DSA 2019 Fall Chap.3 骑士遍历问题
如果只是找一组解,使用bfs就足够了,dfs会找出所有的解。 bfs之后再写。 依次输入地图矩阵的阶数,出发点的x,y(自然坐标,从1开始数)。 #include <cstdio> #define MAX 100 int n; int solution_cnt; int offset[][2]={ {-2,1}, {-1,2}, {1,2}, {2,-1}, {1,-2},...原创 2019-10-07 10:00:40 · 167 阅读 · 0 评论 -
BUPT-DSA2019 Fall Chap.3 括号匹配
原理也很简单,就是检测到右括号时,看栈顶是不是对应的左括号,还有就是最后检查完了之后是不是有多余的左括号。 Tips: 可以把它整合进你的计算器里,甚至可以让计算器自动补齐括号。 #include <iostream> #include <string> #include <stack> using namespace std; bool paranthesi...原创 2019-10-07 10:03:20 · 164 阅读 · 0 评论 -
BUPT-DSA 2019 Fall Chap.3 栈可能的输入序列
Reference 栈的合法输出序列-CSDN 关于出栈顺序的模拟和数学检测,之前写过 ZJU数据结构 02-线性结构4 Pop Sequence (25 分) 有启发意义一道题目,学习了在dfs有多个选支时应该如何操作,that is,把当前的状态(含数组,参数等)备份一份,此时两种选支可以串行。 将栈和队列建立在栈里,可以自动控制构造和析构,不用多操心,很方便。 #include <cs...原创 2019-10-07 10:09:13 · 167 阅读 · 0 评论 -
BUPT-DSA 2019 Fall Chap.3 双栈队列
实际上是想用FIFO实现FILO,内部的两个栈一样大可以避免S1把S2倒满了还有多的情况。 思路:装东西装进S1,出东西把S1先倒入S2,从S2出,如果之前S2有元素,就先出S2原有的。 使用了模板类来实现,可以使用Queue_s<类型>来实现任意数据类型的双栈队列,比如声明一个装char的队列。 Queue_s<char> s; 测试程序是输入一些数,EOF结束,然后按...原创 2019-10-07 10:18:51 · 154 阅读 · 0 评论