![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛入门经典-第6章 数据结构基础
lab104_yifan
这个作者很懒,什么都没留下…
展开
-
uva442 Matrix Chain Multiplication
UVA 442题意:输入几个矩阵然后输入字符串,根据输出的字符串,判断矩阵相乘所需要计算的乘法次数思路:用栈的思想,用一个二维数组模拟栈,遇到左括号往上多一层,遇到右括号运算结果,保存到下一层中,计算到字符串末尾。每次计算结果,把乘法次数加上去,最后得到的就是总次数代码:#include using namespace std;#include #原创 2013-07-09 08:14:12 · 1382 阅读 · 0 评论 -
UVA 540 Team Queue 题意很重要!!!!!
UVA 540 Team Queue题意是,有几个组的人,将他们排队,如果队列中有相同组的人,就可以插队到那些人后,如果没有,就排到队列末一开始题意理解错了,导致一直WA,坑爹啊。。。所以英语还是很重要的!解法 用数组模拟,没什么好说的。代码#include #include struct Q{ int el[1005]; int原创 2013-07-17 01:03:34 · 1285 阅读 · 0 评论 -
UVA 673 Parentheses Balance
UVA 673 Parentheses Balance题意就是判断左右括号是否匹配。用数组模拟栈,左括号就入栈,右括号遇到栈顶是对应的左括号,就将左括号出栈,否则就是NO,字符串结束后,若栈不为空,就NO。水过#include #include int n;char sb[205];char stack[205];int main(){ scanf("%d",原创 2013-07-17 01:01:17 · 1097 阅读 · 0 评论 -
UVA 11234 Expressions
UVA 11234 Expressions题目看了好久才看懂。从字符串从后往前,一个个字符建二叉树,如果是大写字母就新建一个节点,如果是小写就返回,建好后,进行BFS把树输出即可。在POJ上超时了。 很坑爹 时间复杂度为O(n), 不可能超时按理说, 应该是用了动态内存分配超时。在UVA上顺利AC#include #include #include typedef原创 2013-07-16 09:18:46 · 1248 阅读 · 0 评论 -
UVA 297 Quadtrees 好像不是很难。又好像不是很简单
UVA 297 Quadtrees题目的意思挺好理解的,输入两颗四叉树,按照p为不空不满,f为满,e为空,按照先序输入, 把两颗四叉树合并起来,计算出新树的值。。思路:首先把2个字符串处理,变成2个二维数组存放,然后在通过二维数组,就能查找到每个位置的结点相加之后的结果,要注意,如果四叉树4个分叉都为f,那么处理为结点为f,结点之后全部删除。代码#include原创 2013-07-12 23:03:18 · 1243 阅读 · 0 评论 -
uva 196 Spreadsheet 拓扑排序 。坑爹的一题
uva 196 Spreadsheet这题字符串处理上还是有点麻烦的,不过也还是可以处理然后就是拓扑排序, 一开始是用一个个删除度数0的点的方法, 在POJ上过了 POJ数据果断水。。。 在UVA上无限超时。坑爹啊。 后来换成用DFS过了。不容易PS:这题数据上是说要1 ~ 999 * 1 ~ 1800000多少的数据。。非常大。可是实际上只要开1000*1原创 2013-07-12 12:19:45 · 1519 阅读 · 0 评论 -
uva 10129 Play on Words
uva 10129 Play on Words欧拉回路,这题是有向图判断方法是 点出入度都相等或者 有2个点出入度相差1,其他点都相等思路:有100000个字符串,看似很大,其实可以只存字母的出入度,因为字母只有'a' - 'z' 26个, 只要开26的数组即可,然后判断度数是否符合条件#include #include int t;int n;ch原创 2013-07-12 08:15:23 · 1165 阅读 · 0 评论 -
UVA 10054 The Necklace
UVA 10054 The Necklace依然是欧拉回路。不过要多一部输出顺序,用递归输出即可。判断是否都连通并且是否每个点度数都为偶数#include #include int t;int tt;int n;int parent[55];int du[55];int vis[55];int judge;int v[55][55];int c原创 2013-07-12 08:11:54 · 1303 阅读 · 0 评论 -
UVA 10596 Morning Walk 简单的k欧拉回路
UVA 10596 Morning Walk简单的欧拉回路,用并查集判断图是否每个结点连在同一片,然后判断每个节点度数是否都为偶数解法:没什么好说的直接上代码, 不过要注意的是输出格式原创 2013-07-12 08:08:55 · 1434 阅读 · 0 评论 -
uva10305 Ordering Tasks
uva10305 Ordering Tasks题意 输入n,m 表示n个事件,和m个事件发生顺序,输入m行a b,表示a在b之前发生,最后输出事件发生顺序,任意一个即可解法 简单的拓扑排序。水过#include #include int map[105][105];int du[105];int n, m;int i, j;int a, b;int vis[10原创 2013-07-11 23:55:56 · 1445 阅读 · 0 评论 -
UVA 10004 Bicoloring
UVA 10004 Bicoloring 题意:输入数据,构造出一个图,你能用2种颜色去填充该图的每个节点,如果有2个相邻结点颜色相同,该图为NOT Bicoloring,如果每相邻颜色都不同,则为Bicolring。思路:搜索的水题,用DFS从每个点为起点都找一次,当找到回路的时候,判断该回路结点个数如果是奇数,必然有2个相邻结点颜色会相同,跳出。如果是偶数,那就。。。继续找吧原创 2013-07-10 09:16:10 · 1505 阅读 · 0 评论 -
UVA 532 Dungeon Master
UVA 532 Dungeon Master题意:构造一个三维的迷宫,S代表当前位置,E代表出口,要判断能不能到出口,如果能,还要输出需要的时间(每走一步1分钟)。思路: 这题是用到3维数组的搜索,一开始用DFS果断超过,卡了半天。坑爹。。。换BFS就过了。。。代码:#include #include struct fuck{ int x; int y;原创 2013-07-10 09:12:03 · 1576 阅读 · 0 评论 -
UVA 784 Maze Exploration
UVA 784 Maze Exploration 题目很好理解,输出一个地图。’X‘代表墙,如果有*的地方,就往四面八方扩散,能到的地方就变成’#‘。题意:直接搜索地图,走过的点变成’#‘即可, 大水题╮(╯▽╰)╭。。。代码:#include #include int d[4][2] = {{1, 0}, {0, -1}, {-1, 0}, {0, 1}};原创 2013-07-10 09:09:05 · 1794 阅读 · 0 评论 -
UVA 127 Accordian'' Patience
UVA 127 Accordian'' Patience题意:把一堆扑克牌,按照规则:如果左边1张或3张和它具有同花色或等级,把这张牌移到上面去,每次移动后,在从头开始移动,知道都移动完,输出剩余几堆与每堆牌数,如果1张牌有2个可以移动的地方,优先移动到左3位置。思路:用结构体存每一张牌,用栈来储存牌堆,每次判断能不能移动牌,每次移动后进行一次变换。代码:#include #in原创 2013-07-10 08:57:15 · 1210 阅读 · 0 评论 -
UVA 699 The Falling Leaves
UVA 699 The Falling Leaves题意 输入一棵树,把垂直方向上同一位置的叶子节点值加以来,最后逐个输出思路 题目中是按前序输入树,所以就按前序来建立一棵树,之后建一个数组,从数组中间开始存,每次访问左节点就把数组往左存,访问右节点就往右,最后输出储存的数组即可代码#include #include #include int num[1原创 2013-07-09 08:38:31 · 1262 阅读 · 1 评论 -
uva10152 ShellSort
uva10152 ShellSort题意:输入2个乌龟名字的序列, 把第一个输入序列变换为第二个序列变换的规则是乌龟只能从底往上爬且只能爬到顶不能插入中间。解法:把2个序列自下而上找匹配,若匹配,这两个序列同时往上找下一个名字,若不匹配则原序列往上找一个名字,直到原序列找到顶部,看看需变换的序列还有几个名字,把这几个名字自下而上输出即可。代码:#in原创 2013-07-09 08:19:25 · 1209 阅读 · 0 评论 -
UVA 548 tree
UVA 548 tree题意 输入中序遍历和后序遍历来建成一棵树, 然后找出这颗树上路径值总和最小的路径,输出该路径终端节点的值思路 根据中序后续建树建树方法Tree * build(int *in, int *pos, int len){ if (len == 0) return NULL; int i = len - 1;原创 2013-07-09 08:44:08 · 1948 阅读 · 0 评论 -
UVA 133 The Dole Queue
UVA 133 The Dole Queue题意 输入N,k,m,有N个人站成一圈, k表示一个官员每次按k个位置顺时针找人,m表示一个官员按m个位置逆时针找人每次找到的人就去除掉,并输出,直到没人。解法 用数组模拟,每次寻找进行一次数组的变换,直到人数为0代码#include using namespace std;#include #i原创 2013-07-09 08:29:39 · 1159 阅读 · 0 评论 -
UVA 439 Knight Moves 简单广搜
UVA 439 Knight Moves移动骑士,求最小步数,简单的广搜。。。水过#include #include int d[8][2] = {{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};char a[3],b[3];int num;int x, y ,xx ,yy;struct Q{原创 2013-07-18 01:44:51 · 1389 阅读 · 0 评论