
第六章 数据结构基础(例题)
aozil_yang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
例题6-5 UVA 12657 Boxes in a Line 移动盒子
感觉很好的一道题目。看了很久:用到了双向链表。1。用了两个数组left[maxn],right[maxn]代表当前元素的左边一个或者右边一个,当这个值为0的时候代表不存在!2。对于4号命令,逆转整个序列,并没有真正的逆转,而是用inv 记录 是否逆转,利用了逆转两次等于没有逆转这个道理。逆转只会影响到1命令和2命令,3命令是XY换一下,并不会影响到,所以对与1和2,直接op = 3 -原创 2016-02-09 01:20:35 · 484 阅读 · 0 评论 -
例题 6-15 UVA 10305 Ordering Tasks 给任务排序
简单记录下 书中的方法:建立一个c数组表示访问的状态,-1为正在访问,1表示访问完毕,0表示未访问。G[u][v]表示u 然后遍历U, 对u进行dfs,dfs的方式是从1到n在来一遍,依次进行。之所以数组倒着写,是因为输入的肯定是dfs最深的,最深的也是最大的,要放在面!#include#includeconst int maxn = 100 + 10;int c[ma原创 2016-02-22 18:46:22 · 604 阅读 · 0 评论 -
例题6-22 UVA 11853 Paintball 战场
思路:从上边界开始找,如果能够连通的到达下边界,则肯定不能从左边到右边,也就是无解!从上边界开始找就是dfs,每dfs一次就判断与左边界的交点,和右边界的交点,不断的取最小值即可!之所以不断的取靠南的方向,是因为从这个交点向上肯定过不去,因为是一路找过来的吗!教训:1。这个题不能从下边界开始找!2。注意不能return dfs;#includeusing namesp原创 2016-03-06 22:24:24 · 554 阅读 · 0 评论 -
例题6-20 UVA 1599 Ideal Path理想路径
思路和书上思路一样!先 从终点BFS,用d数组记录到终点的最短距离,直接从0开始不断加1即可!扫到起点后,在从起点开始BFS,走路的条件必须满足,下一个路 加 1 等于这个路,而且没有访问过 vis[i] = 0,然后在是字典序最小(把所有字典序最小的全部加入!)最后存入答案时,用step 记录从1走到当前步的步数,这个数值就是答案的 索引,最后答案存入所有路中最小字典序就行了!这原创 2016-03-03 16:17:08 · 657 阅读 · 0 评论 -
例题6-13 UVA 1103 Ancient Messages 古老象形符号
简单说下题意:给你一个H行W列的字符矩阵,他们是压缩后的十六进制矩阵,把每一个字符变成四个二进制数后,1代表黑像素,0代表白像素,问这些像素组成的图案是题目6种的哪一种!题意有几个需要注意的地方:书中分析说数白洞个数!但有可能多个图案放在一起,如何分开呢,那就是上下左右不相互有公共边,斜着就不算了!思路:1.把他们存到int二维数组里面,1写成-1,0还是0,然后先第一原创 2016-02-20 12:51:07 · 632 阅读 · 0 评论 -
例题6-2 UVA 514 - Rails (铁轨)
挺好的一道题目,想样例代码也想了很久。大体思路:整体分为两个过程,从A到C,从C到B,用A代表要从A到C的编号序列,肯定是1到n了,用B代表最终在B的车的编号。让A = 1,B = 1,B是最终车辆的数组索引。开始循环,发现A中的车等于B中的车,则说明了,这辆车要立即进站并且立即出站。else 发现 B中的车等于栈C中的第一个,那么说明此时,栈C的中的车要出站。e原创 2016-02-03 23:34:06 · 589 阅读 · 0 评论 -
例题6-19 UVA 1572 Self-Assembly自组合
思路:用奇数存放A+,B+,C+,D+......Z+用偶数存放A-,B-,C-,D-........Z-;所以只需要数组52存放即可!给有向图做一次拓扑排序,用G[u][v]表示u 与 v 相连。例如: A+ 与B+相连接,那么直接让A- 与B +对应就可以了!(这里想了很久)然后就是c数组表示访问状态!-1表示正在访问,0未访问,1表示访问完成!发现环后re原创 2016-03-02 16:38:03 · 575 阅读 · 0 评论 -
例题6-7 UVA 122 - Trees on the level 树的层次遍历
因为过年,这个题看了比较长的时间,但是看懂了后,感觉题目解析非常巧妙这篇博客就记录下自己学到的东西吧!1。在输入方面,直接开了一个bool read_input()函数,这样在输入EOF时,就返回false,所以可以在main函数里直接这样写:while(read_input()){...}。2。在这个read_input 函数里面,用到了sscanf (&s[1]),这样就把字符串从原创 2016-02-11 17:25:29 · 799 阅读 · 0 评论 -
例题6-12 UVA Oil Deposits油田
简单的DFS 和那个上篇POJ 一样的题目!#include#include#includeusing namespace std;const int maxn = 100 + 10;int N,M;char mep[maxn][maxn];void dfs(int x,int y){ mep[x][y] = '*'; for (int dx = -1; dx原创 2016-01-29 20:39:31 · 451 阅读 · 0 评论 -
例题6-4 UVA 11988 Broken Keyboard (a.k.a. Beiju Text) 破损的键盘
一道很有趣的题目:就是把 [ 转换成HOME,把 ] 转换成end键最后输出就行了。例题中用了链表,简单记录下这个题的链表。也让我明白了链表有多种多样,自己只局限于结构体的链表了!用cur记录光标位置,last表示最后一个,用next数组记录各个字符连接到下个是哪个字符。最后输出next数组的序号即可!#include#includeusing namespac原创 2016-02-09 01:33:30 · 612 阅读 · 1 评论 -
例题6-3 UVA 442 Martrix Chain Multiplication矩阵链乘
这个题感觉类似于找BUG那个题,这个题给你很多运算式子,求解式子的值,主要就是括号问题。看了例题分析:感觉方法非常巧妙:利用了栈stack,:碰到一个字母就入栈,碰到一个右括号“ )”,就出栈两个元素,计算后记录结果,并把结果再次入栈,以此类推,,好巧妙!也给我一个启示,像这种类似多括号问题,尽量试试stack分析解析式!!奥 结构体构造函数初始化不能忘,构建新的结构体入栈原创 2016-02-09 01:28:02 · 1179 阅读 · 0 评论 -
例题6-16 UVA 10129 Play On Words单词
大体题意:给你n个单词,问是否可以首尾相连,就是单词接龙!思路:看了下LRJ写的,用到了并查集判断有向图是否连通。单词可以根据首字母,尾字母进行分类集合,最多26个集合!字母看作结点,单词看成有向边。有解的情况:1.必须连通2.出度不等于入度的只能有0个或者2个!有两个的情况还必须满足,一个出度比入度大1 (起点),入度比出度大1(终点)!可以用lef表示剩余的原创 2016-02-23 00:09:29 · 544 阅读 · 0 评论