总结一下实现dfs搜索时出现的小问题
来源:互联网 发布:日本人基因 知乎 编辑:程序博客网 时间:2024/05/16 12:02
1;每次路径搜索要注意是否要进行变化和[还原(回溯)]=有必要的时候才会有回溯;
例如hdu1010题;判断t时刻是否可以从S到达D处;这里就要每次这个路径结束时要还原;也就是回溯;看代码实现;
for(i=0;i<4;i++) { int fx=x+dir[i][0]; int fy=y+dir[i][1]; if(fx>=0&&fx<n&&fy>=0&&fy<m&&map[fx][fy]!='X') { map[fx][fy]='X';//变化;这个步骤就是实现搜索的中心 dfs(fx,fy,cnt+1); map[fx][fy]='.'; //回溯 } }
看那两个map赋值就是完成这一步骤;实现变化和还原;
这一步骤就是实现了已fx,fy为中心往四周进行搜索的目的;
2;控制搜索的方向;就是用数组加上for循环来实现的;
看代码;
这是8方的搜索;要定义【8】【2】的数组;for(i = 0; i < 8; i++)来实现的;
4面也是同样的;
int fs[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};void dfs(int x,int y){ int i,fx,fy; for(i = 0; i < 8; i++){ fx = x + fs[i][0]; fy = y + fs[i][1]; if(fx>=0&&fx<a&&fy>=0&&fy<b&&map1[fx][fy]=='@'){ map1[fx][fy]='*'; dfs(fx,fy); } }
3;进入递归的那个if判断,一定要注意其边界条件;要控制在矩阵内部;
代码;
if(fx>=0&&fx<a&&fy>=0&&fy<b&&map1[fx][fy]=='@'){ map1[fx][fy]='*'; dfs(fx,fy);}
4;读入字符的时候尽量使用%s进行读入;还要注意与之前的横列别搞错了。
for(i = 0; i < a; i++){ scanf("%s",map1[i]); }
5;这也是最重要最灵活的一点;
根据题目要求;
在合适的地方插入判断或者变量进行计数判断;实现相应的目的。
hdu1241就是在主函数那插入num++;进行计数
for(i = 0; i < a; i++){ for(j = 0; j < b; j++){ if(map1[i][j]=='@'){ map1[i][j]='*'; num++; dfs(i, j); } } }
hdu1010的迷宫类型的题;
问t时刻是否可以到达D处;
就是利用插入if的判断实现目的的;这些判断也叫做剪枝了;
1 0
- 总结一下实现dfs搜索时出现的小问题
- 【总结】总结一下自己动手尝试实现的一些小Demo
- centos新手,总结一下解决的小问题。
- 开发过程中 遇到的一些小问题 总结一下
- 刚开始玩openMP,总结一下遇到的一点小问题。
- PCB板在调试时出现的问题总结以及设计出现的小Bug
- 总结一下使用Swift遇到的几个小问题和几个小知识点
- 总结一下二分搜索
- DFS BFS 搜索总结
- HDU-1258(DFS搜索的问题)
- 深度优先搜索(DFS)的实现
- 总结一下以往做的java项目出现的各种中文乱码问题
- 总结一下之前遇到的Android app的开发的小问题
- 请问一下发博中出现的问题
- 关于搜索的小问题
- 刚接触ubuntu,遇到的小问题总结一下(持续更新)
- 小算法总结一下
- MSN的小问题。借助一下BLOG。
- vmware安装虚拟机出现“无法获得VMCI驱动程序的版本:句柄无效”的问题
- eclipse和Android studio中获取sha1和md5
- FFmpeg 常用选项功能说明(视频专家地址)
- thinkphp安装插件phpExcel实现导出导入数据实例教程
- 【VB技巧】VB静态调用与动态调用dll详解
- 总结一下实现dfs搜索时出现的小问题
- IOS端调用微信支付时出现:“调用JSAPI缺少参数:timeStamp”解决方法
- AFNetworking多任务异步请求
- hadoop2.7.2分布式集群搭建和生态系统配置
- 利用手机传感器定位的AR demo
- 主席树
- html5编程工具
- 计算机视觉牛人博客和代码汇总(全)
- find a subarray that contains the largest sum, constraint that sum is less than k