![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
紫书第六章
accosmos
这个作者很懒,什么都没留下…
展开
-
UVa11853 Paintball
题目大概意思是,在给定一个矩形内,给定n个圆(0n1000)是障碍物,让你找出一条路径从x=0到x=1000 。开始我想错了,后来看大佬的解释,才知道原来可以自上而下以圆来做DFS,意思就是先找和y=1000相切或相交的圆,然后再做DFS,搜索与它相交或相切的圆,如果圆和x=0相切或相交,可以利用y-r*r-x*x求出最上边那个点(画个图更容易理解)同样x=1000也是这样求的。要注意的是必须...原创 2018-10-25 21:52:54 · 152 阅读 · 0 评论 -
uva 816(经典bfs例子)
题意:有一个最多包含9*9个交叉点的迷宫 。输入起点,离开起点时的朝向和终点,求一条最短路径。每个交叉点的朝向不同能左转,右转或直走也不同。求最短路径。分析:定义三元数组,[x][y][dir],位置和朝向。里面对数据的处理值得学习。#include<cstdio>#include<cstring>#include<vector>#include...原创 2019-03-16 15:21:57 · 300 阅读 · 0 评论 -
uva1624knots
题意:给出一个橡皮筋,有两种操作,问是否可以将它还原分析:将橡皮筋一步步还原,先删除没有覆盖的结点,然后删除满足条件的结点#include<iostream>#include<string.h>#include<sstream>#include<set>#include<algorithm>#include<ve...原创 2019-03-01 10:34:11 · 306 阅读 · 0 评论 -
uva1616二分加误差处理
题意:给定n个线段,求一个最大长度,使得每个线段都不相交分析:因为要找线段的最大长度,所以可以用二分法来迭代。当误差小于一个值的时候就退出。但是题目主要考的好像是精度处理。将长度化为分数。可以想到最大的分母是n(n个线段一样大,并且l和r都一样)枚举分母从1~r,找到误差最小的。#include<iostream>#include<string.h>...原创 2019-02-22 08:22:31 · 177 阅读 · 0 评论 -
UVa10410 Tree Reconstruction(bfs+dfs确定二叉树)
题意就是给你二叉树的bfs和dfs遍历,都是结点小的优先遍历本来自己没做出来,不想写的,做了半天测试数据是对的,但是WA。因为看了一个大佬的解法,让我感慨万分,简洁而直接的解法,正确而清晰的思路,让我佩服的五体投地。充分运用的bfs,dfs,以及栈的性质,这句话很重要,代码真是艺术,总存在最简解法。#include<iostream>#include <string&...原创 2018-11-01 18:39:57 · 230 阅读 · 0 评论 -
UVa810 A Dicey Problem 筛子难题
将一个筛子放在M*N的地图上,每次翻滚前翻滚后的位置的点数必须要与翻滚前筛子的上面的点数相同,给定起点,找出一条可循路径,返回起点。这题好像没有强调最短路径,可以用dfs做,我TL了,用的bfs,可能是输出路径调用了栈,也可能是bfs判断条件多了。以后有好的想法再改吧#include<iostream>#include <string>#include &...原创 2018-11-03 12:44:47 · 201 阅读 · 0 评论 -
UVa12166 Equilibrium Mobile修改天平(二叉树+dfs)
题目大意:给定一个深度不超过16的二叉树,代表一个天平,问至少修改多少个秤砣,才能使天平平衡。题目意思很简单,就是找一个可以使整个天平修改次数最少的点,一个点可以确定整个天平,开始我就用的这个思路,会超时。方法:利用二叉树的特性,找出重复最多的点,深度会改变节点值,深度是假如深度是n的话,value=nowvalue<<n,用map储存,每次加一。寻找出重复最多的,然后用总节点...原创 2018-10-27 15:07:55 · 177 阅读 · 0 评论 -
UVa1600 PatrolRobot 巡逻机器人(bfs)
题目大意:给定一个网络(1m,n20)m是row,n是col,求从(1,1)到点(m,n)的最短路径,其中0是空地,1是障碍物,给定k,表示不能连续穿过k个障碍物,方法:bfs,其中必须要注意的是每个点的访问不能用二维数组储存,因为不同走法,每个点的累积穿过障碍物不同。假如第一次走过这个点,已经穿过了K个障碍物,下一次穿过这个点的时候可能就是累积穿过G个障碍物,所以这种情况要考虑在内。解决方法...原创 2018-10-27 10:16:08 · 209 阅读 · 0 评论 -
UVa439 Knight Move 骑士的移动(bfs)
题目大意:有一个8*8的国际象棋棋盘,输入起点和终点,问马最少走几步。方法:用一次bfs,难点应该是计算最少步数,解决方法是设置一个层,每次遍历父节点周围的子节点就执行子节点的层=父节点的层+1,这样一来每个节点都有自己的层,每个节点都是公平的所以最后搜索出来直接就是最小步数。代码:#include<iostream>#include <string>#i...原创 2018-10-26 20:42:35 · 338 阅读 · 0 评论 -
Uva536 Tree Recovery二叉树重建(先序和中序确定二叉树,后序输出)
题目大意:给定二叉树先序和中序遍历,输出二叉树后序遍历。方法:将英文字母映射为数字,利用数组存储,先序第一个节点是父节点,然后再从中序遍历中找到位置。注意边界。代码也很简单一次ac。#include<iostream>#include <string>#include <string.h>using namespace std;string p...原创 2018-10-26 18:38:46 · 150 阅读 · 0 评论 -
UVa712 S-Trees满二叉树
题目意思就是给你一个满二叉树,然后输入命令查询,0是向左,1是向右。比较简单,直接上代码。#include<iostream>#include <string>#include <string.h>using namespace std;int lefttree[1000],righttree[1000]; int n;string st; i...原创 2018-10-26 14:19:03 · 134 阅读 · 0 评论 -
uva 10305拓扑排序
题意:给定n个二元组(u,v)表示u<v。将这些元素排序。分析:dfs搜索,如果存在有向环,那么无解。#include<cstdio>#include<cstring>const int maxn = 1000;int n, m, G[maxn][maxn], c[maxn], topo[maxn], t;bool dfs(int u){ c[u...原创 2019-03-16 15:47:24 · 115 阅读 · 0 评论