![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛入门经典-第2版
jenkin233
这个作者很懒,什么都没留下…
展开
-
UVA 548 树
这道题的关键字在于根据中序遍历和后序遍历建立出二叉树。另外在寻找路径时,可使用深度优先的方式搜索,搜索到叶子节点时加以判断即可。 这里用到sstream来读入,也是一个技巧,记录下来。 代码如下:#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<s原创 2017-07-10 16:15:22 · 189 阅读 · 0 评论 -
UVA 210 并行程序模拟
这道题模拟程序执行过程,就绪队列使用STL的双端队列deque,阻止队列使用普通队列。在遇到unlock时,把阻止队列的头节点放入就绪队列的队首。代码如下:#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<deque> #include<queue>原创 2017-07-09 14:20:12 · 374 阅读 · 0 评论 -
UVA 1590 IP地址
这道题先求出子网掩码,然后将最小的IP地址与子网掩码按位与即可得到网络地址。注意以下问题: 1.求子网掩码,即所有32位地址最左一个不同出现的地方后全为0,前面全为1。 2.由于IP地址可能有重复,可以用set来保存所有IP地址,从而去除重复。 3.只需要将最小的IP地址与子网掩码按位与即可得到网络地址,set里面是按字典序排的,从而只需要取set第一个IP地址即可。代码如下:#include原创 2017-07-08 17:31:18 · 357 阅读 · 0 评论 -
UVA 220 黑白棋
这道题按照题目描述的三种指令来模拟即可。 Q–退出并打印当前棋盘,L–先明确当前是黑棋还是白旗的回合,然后搜索棋盘的每个位置看是否可以放,M–先检查当前回合是否有合法位置,如果没有切换双方回合然后放置,放置后修改棋盘和棋子数目。注意输出格式,特别是’Black - xx White - yy’,是%2d格式。代码如下:#include<cstdio> #include<iostream> #inc原创 2017-07-07 23:30:40 · 595 阅读 · 0 评论 -
UVA 1589 象棋
这道题花了很久总是WA,最后发现竟然是在一个判断时括号的位置不正确QAQ,真的想死的心都有了。 总体思想:记录所有下红色棋子的位置和种类,然后对于“将”能走的四个位置分别判断是否都有红色棋子能够到达。这里注意一个问题,“将”在移动一格后可能会吃掉一个红子,所以在每次对红色棋子去检查时需要判断它是否已经被吃掉了。下面附上代码:#include<cstdio> #include<iostream> #原创 2017-07-07 21:52:53 · 324 阅读 · 0 评论 -
UVA 140 带宽
这道题的思路就是对于所有可能的排列,计算出具有最小带宽的排列。 由于如果有多个最小带宽时要输出字典序最小的排列,所以需要为字母按照字典序编号。这里我是用set来记录所有出现的字母,然后利用set里面本来就排过序的特点,为每个字母编号,再建立图。 一个剪枝的方法时,如果在寻找一个新排列的过程中,已经发现某一个节点的带宽大于等于当前最优解,则可以放弃这次排列,进行下次排列。我觉得这种情况下如果搜索到原创 2017-07-14 19:49:09 · 290 阅读 · 0 评论 -
UVA 1599 理想路径
这道题思路很清楚,先反向bfs搜索点n到每个点的最短距离,然后再从点1正向bfs搜索,每次搜索距离减1的点,并将路径上颜色最小的点入队,如果有多个相同的则将这多个点入队。 对于队列中的任意一个点v,d[1]-d[v]一定是大于等于0的,所以可以用cost[d[1]-d[v]]来记录到点1为d[1]-d[v]距离的最小颜色值。一开始写完交上去TLE,还以为是每次调用n次vector的clear太慢,原创 2017-07-12 23:11:50 · 316 阅读 · 0 评论 -
UVA 1103 象形符号
此题是十六进制转为二进制+DFS,通过搜索图像中有几个被隔绝的白“洞”来判断是哪个文字。这里考虑一个问题,图像最外面的白色空间怎么办?想到先提前把图像外层的白色空间搜索完毕,从而搜索时只会考虑被包在中间的白色。但是如果黑色占据了边缘,隔绝了外层的白色呢?所以在这里我在整个图像的外面再加一层白色,从而使整个图像的外部白色连成一起。输出时,由于按照字典序输出,可以考虑使用vector,每次判断出一个文字原创 2017-07-11 14:36:04 · 376 阅读 · 0 评论 -
UVA 839 天平
记录下这道题。一开始写的f()函数感觉没有问题,和solve函数看上去是一样的,但就是WA。后来才发现,如果f()函数遇到读入数据不平衡时就会提前返回False,而没有接着去读下面的数据,从而导致后面的数据都读得出错,猜测应该是这里出现的错误。 下面附上AC的代码,其中包含一开始的f()函数,当然它是错的,没有使用它,在此做个记录。#include<cstdio> #include<iostrea原创 2017-07-10 17:08:46 · 247 阅读 · 0 评论 -
UVA 122 树的层次遍历
这里使用数组来实现二叉树,用整数表示节点编号,left[u]和right[u]分别表示u节点的左孩子和右孩子的节点编号。 这里关键是按照输入建立出二叉树。 对应代码如下:#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string> #include<vector> #inclu原创 2017-07-10 14:13:50 · 226 阅读 · 0 评论