第六章 数据结构基础(例题)
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 · 426 阅读 · 0 评论 -
例题 6-15 UVA 10305 Ordering Tasks 给任务排序
简单记录下 书中的方法: 建立一个c数组表示访问的状态,-1为正在访问,1表示访问完毕,0表示未访问。 G[u][v]表示u 然后遍历U, 对u进行dfs,dfs的方式是从1到n在来一遍,依次进行。 之所以数组倒着写,是因为输入的肯定是dfs最深的,最深的也是最大的,要放在面! #include #include const int maxn = 100 + 10; int c[ma原创 2016-02-22 18:46:22 · 544 阅读 · 0 评论 -
例题6-22 UVA 11853 Paintball 战场
思路: 从上边界开始找,如果能够连通的到达下边界,则肯定不能从左边到右边,也就是无解! 从上边界开始找就是dfs,每dfs一次就判断与左边界的交点,和右边界的交点,不断的取最小值即可! 之所以不断的取靠南的方向,是因为从这个交点向上肯定过不去,因为是一路找过来的吗! 教训: 1。这个题不能从下边界开始找! 2。注意不能return dfs; #include using namesp原创 2016-03-06 22:24:24 · 500 阅读 · 0 评论 -
例题6-20 UVA 1599 Ideal Path理想路径
思路和书上思路一样! 先 从终点BFS,用d数组记录到终点的最短距离,直接从0开始不断加1即可! 扫到起点后,在从起点开始BFS,走路的条件必须满足,下一个路 加 1 等于这个路,而且没有访问过 vis[i] = 0,然后在是字典序最小(把所有字典序最小的全部加入!) 最后存入答案时,用step 记录从1走到当前步的步数,这个数值就是答案的 索引,最后答案存入所有路中最小字典序就行了! 这原创 2016-03-03 16:17:08 · 600 阅读 · 0 评论 -
例题6-13 UVA 1103 Ancient Messages 古老象形符号
简单说下题意: 给你一个H行W列的字符矩阵,他们是压缩后的十六进制矩阵,把每一个字符变成四个二进制数后,1代表黑像素,0代表白像素,问这些像素组成的图案是题目6种的哪一种! 题意有几个需要注意的地方: 书中分析说数白洞个数!但有可能多个图案放在一起,如何分开呢,那就是上下左右不相互有公共边,斜着就不算了! 思路: 1.把他们存到int二维数组里面,1写成-1,0还是0,然后先第一原创 2016-02-20 12:51:07 · 580 阅读 · 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 · 538 阅读 · 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 · 523 阅读 · 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 · 760 阅读 · 0 评论 -
例题6-12 UVA Oil Deposits油田
简单的DFS 和那个上篇POJ 一样的题目! #include #include #include using 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 · 390 阅读 · 0 评论 -
例题6-4 UVA 11988 Broken Keyboard (a.k.a. Beiju Text) 破损的键盘
一道很有趣的题目: 就是把 [ 转换成HOME,把 ] 转换成end键最后输出就行了。 例题中用了链表,简单记录下这个题的链表。 也让我明白了链表有多种多样,自己只局限于结构体的链表了! 用cur记录光标位置,last表示最后一个,用next数组记录各个字符连接到下个是哪个字符。 最后输出next数组的序号即可! #include #include using namespac原创 2016-02-09 01:33:30 · 566 阅读 · 1 评论 -
例题6-3 UVA 442 Martrix Chain Multiplication矩阵链乘
这个题感觉类似于找BUG那个题, 这个题给你很多运算式子,求解式子的值,主要就是括号问题。 看了例题分析:感觉方法非常巧妙: 利用了栈stack,: 碰到一个字母就入栈,碰到一个右括号“ )”,就出栈两个元素,计算后记录结果,并把结果再次入栈,以此类推,,好巧妙! 也给我一个启示,像这种类似多括号问题,尽量试试stack分析解析式!! 奥 结构体构造函数初始化不能忘,构建新的结构体入栈原创 2016-02-09 01:28:02 · 1114 阅读 · 0 评论 -
例题6-16 UVA 10129 Play On Words单词
大体题意: 给你n个单词,问是否可以首尾相连,就是单词接龙! 思路: 看了下LRJ写的,用到了并查集判断有向图是否连通。 单词可以根据首字母,尾字母进行分类集合,最多26个集合!字母看作结点,单词看成有向边。 有解的情况: 1.必须连通 2.出度不等于入度的只能有0个或者2个! 有两个的情况还必须满足,一个出度比入度大1 (起点),入度比出度大1(终点)! 可以用lef表示剩余的原创 2016-02-23 00:09:29 · 501 阅读 · 0 评论