目录
本周看了搜索(BFS DFS),图论,数论博客:
具体如下:
一:BFS:
1:BFS模板-走迷宫_凌乱之风的博客-CSDN博客_bfs迷宫模板
然后我又做了下面这个洛谷上的题,题目比博客上的要难,博客是一个可以套用BFS模板的题,而题目则是需要修改一下限制条件,并且输出过程路径
void search(int t)
{
if(满足输出条件)
{
输出解;
}
else
{
for(int i=1;i<=尝试方法数;i++)
if(满足进一步搜索条件)
{
为进一步搜索所需要的状态打上标记;
search(t+1);
恢复到打标记前的状态;//也就是说的{回溯一步}
}
}
}
2:BFS基础讲解(广度优先搜索)_背锅切图仔的博客-CSDN博客
本篇写的比较详细,从头文件一直到代码实现+例题
通过读这篇文章,我感觉BFS就像核弹的链式反应一样,只不过核反应无法终止,而BFS在一定条件下就可以停止
接下来是一系列BFS题目
3:UVA 11624 Fire!(图论BFS)_focus_best的博客-CSDN博客
4:POJ 3278 Catch That Cow(图论:BFS)_focus_best的博客-CSDN博客
5: POJ 3414 Pots(图论:BFS)_focus_best的博客-CSDN博客
6:POJ 1324 Holedox Moving(图论:BFS)_focus_best的博客-CSDN博客
7:POJ 2243 Knight Moves(BFS或DFS)_focus_best的博客-CSDN博客
8: POJ 1753 Flip Game(BFS+状态压缩)_focus_best的博客-CSDN博客
9: POJ 1606 Jugs(BFS:找最短路径并输出)_focus_best的博客-CSDN博客
10: POJ 1077 Eight(BFS:输出路径)_focus_best的博客-CSDN博客
11: POJ 3346 Treasure of theChimp Island(BFS)_focus_best的博客-CSDN博客
12: POJ 2046 Gap(BFS+hash判重)_focus_best的博客-CSDN博客
13: POJ 3322 Bloxorz I(BFS:求迷宫最短路径)_focus_best的博客-CSDN博客
14: POJ3221 Diamond Puzzle(BFS:最短路)_focus_best的博客-CSDN博客
15: POJ2110 Mountain Walking(BFS/DFS+二分+枚举区间)_focus_best的博客-CSDN博客
16: POJ 2920 Mine Map(BFS)_focus_best的博客-CSDN博客
17: POJ 1465 Multiple(BFS+同余剪枝)_focus_best的博客-CSDN博客
18: HDU 1728 逃离迷宫(BFS)_focus_best的博客-CSDN博客
19: HDU 1240 Asteroids!(BFS)_focus_best的博客-CSDN博客
20: HDU 2579 Dating with girls(2)(BFS)_focus_best的博客-CSDN博客
21: HDU 1226超级密码(数位BFS)_focus_best的博客-CSDN博客
22:HDU 1072 Nightmare(BFS)_focus_best的博客-CSDN博客
23:HDU 1495 非常可乐(BFS:3杯倒水)_focus_best的博客-CSDN博客
24: HDU 1430 魔板(BFS+HASH+置换)_focus_best的博客-CSDN博客
25: HDU 2612 Find a way(BFS)_focus_best的博客-CSDN博客
26: HDU 1180 诡异的楼梯(BFS:时间动态图)_focus_best的博客-CSDN博客
27: HDU 1547 Bubble Shooter(BFS)_focus_best的博客-CSDN博客
28: HDU 1312 Red and Black(简单BFS)_focus_best的博客-CSDN博客
29: HDU 1253 胜利大逃亡(简单三维BFS)_focus_best的博客-CSDN博客
30: HDU 1401 Solitaire(棋盘状态BFS)_focus_best的博客-CSDN博客
31: HDU 1175 连连看(BFS)_focus_best的博客-CSDN博客
32: HDU 1242 Rescue(BFS或BFS+优先队列)_focus_best的博客-CSDN博客
33: HDU 2531 Catch him(BFS:判断是否存在路径)_focus_best的博客-CSDN博客
读完这些题,首先我感觉是作者非常的认真,每篇博客思路都非常清晰;其次我感觉思维非常重要,需要合理去重,寻找最优解,背过模板不是最重要的,最重要的是寻找在最优解。
部分题目用到了哈希表,日后需要学习。哈希表在判重上有着非常重要的作用。
题目中的同余剪枝思想是我第一次见到
BFS不考虑结果位置的可能性,属于盲搜,目的是系统的检查地图上所有的节点,彻底的搜索整张图,直到找到结果位置。
这个算法从某一点开始,同时向不同方向走,直到找到一条路可以走,找到的这一条路就一定是最短的路,这时直接返回,所以这个算法的速度非常的快。
(a与b同余,所以这样.仔细想想).所以如果a的一级子孙节点不行的话,b的一级子孙节点也不行.a的x级子孙节点不行的话,b的x级子孙节点也不行.(想想是不是)也就是说a的每一个特定的子孙%N所产生的余数与 b的每一个特定的子孙%N产生的余数一一对应且相同.
所以我用flag[x]=true表示对N求余==x的数已经产生了,以后如果还有这种数生成,直接放弃即可.
————————————————
版权声明:本文为CSDN博主「focus_best」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013480600/article/details/26458435
这里面很多文章我还是看不太懂,深感自己目前很菜,需要学习的东西还非常多,得再继续努力。
二 :DFS
1: DFS DFS原理白话解析_li_jeremy的博客-CSDN博客_dfs 算法
2:DFS(深度优先搜索算法)_Starzkg的博客-CSDN博客_dfs
DFS基于递归思想,先从头开始递归,全部标记,输出第一种排列,再由尽头递归返回,并取消标记,因为递归返回,有的循环未执行完,继续自增执行,对未标记的项进行填数 ,填数后,又向尽头递归并标记;
简而言之就是一直往深处走,直到找到解或者走不下去为止;
int check(参数)
{
if(满足条件)
return 1;
return 0;
}
void dfs(int step)
{
判断边界
{
相应操作
}
尝试每一种可能
{
满足check条件
标记
继续下一步dfs(step+1)
恢复初始状态(回溯的时候要用到)
}
}
下面是看的题目:
1:POJ 1915 Knight Moves(DFS/BFS)_focus_best的博客-CSDN博客
2: POJ 1024 Tester Program(DFS:求单源最短路径)_focus_best的博客-CSDN博客
这个题十分的巧妙, 博主对两个边同时DFS时间控制精确,代码十分完美
3:POJ 2243 Knight Moves(BFS或DFS)_focus_best的博客-CSDN博客
4:HDU 4536 XCOM Enemy Unknown(DFS+回溯构造)_focus_best的博客-CSDN博客
5:POJ 2034 Anti-prime Sequences(素数预处理+DFS回溯)_focus_best的博客-CSDN博客
6: HDU 4707 Pet(DFS:树深度相关)_focus_best的博客-CSDN博客
7: POJ 1190 生日蛋糕(DFS:优化剪枝)_focus_best的博客-CSDN博客
看题总结
剪枝不够不会超时,直接DFS常在非图遍历中使用,记忆搜索加剪枝是常用的优化方法。
三:图论
因为要学DFS和BFS所以我这周看了图论;在图论里,时常出现DFS 和 BFS的影子,他们常用作图的遍历,目前看理论博客还能将就,看题有些看不懂
1:图论复习——dfs树,点双,边双,强连通分量_Edward The Bunny的博客-CSDN博客
2:图论入门及基础概念(图篇)_qq_43133135的博客-CSDN博客_图论入门
3:图论基础知识_图论基础_cunchi4221的博客-CSDN博客
4: 图论算法新手入门_yhl1999的博客-CSDN博客_图论入门
目前明白了图的表示方法,以及一些简单的遍历,图的类型。图的边界表示,以及图上的点的表示,感觉和线性代数学的矩阵关系比较密切。实际写代码还需要继续学习才行。
四:数论
1:数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)_Must_so的博客-CSDN博客
因为我的数学不是很好,所以想笨鸟先飞,先看看数论,
目前看懂了同余定理,扩展欧几里得算法(这个很有用),素数筛选
但实际代码能力需要加强,在最近的比赛中,也经常出现因为对C++语法不熟悉,导致A不出题来(之前没学过C++,学过JAVA和PY),有些东西C++和别的语言名字相同,但实际用法效果大不相同!纸上得来终觉浅,绝知此事要躬行。接下来要多加练习!