博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深度优先搜索(DFS)
阅读量:5129 次
发布时间:2019-06-13

本文共 2072 字,大约阅读时间需要 6 分钟。

一、思路

  指定的起始点和终点,确定好当前点与邻接点之间的偏移值、结束搜索的条件、符合访问的点所需条件、回溯处理

  1、若当前点的邻接点有未被访问的,则选一个进行访问;

  2、若当前点的邻接点都不符合访问条件,退回到当前点的上一个点;

  3、直到访问到目标终点,或是所有点均以访问仍无法到达终点;

二、伪代码

  DFS可以通过递归函数、栈(先入后出的存储结构)来实现

  1、递归方法实现思路

    

  2、栈实现思路

    

 

三、实例

  前段时间正好帮同学敲一个迷宫的讲解,针对具体题目H是墙,O是路。。。

代码由C++编写

 

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 typedef struct { 9 int x, y, step;10 }point;11 void out(int a[100][100], int m, int n){
//用于查看迷宫地图12 int i, j;13 for(i = 0; i < m; i++){14 for(j = 0; j < n; j++)15 cout << a[i][j] << " ";16 cout << endl;17 }18 }19 20 int main(){21 int t, z;22 cout << "请输入需要走几个迷宫:" << endl;23 while(cin >> t){24 int m, n;25 for(z = 0; z < t; z++){26 int i, j;27 string str; //用于输入28 stack
s; //用于保存已走的路径29 point start, end; //起始点和终止点30 int map[100][100]; //迷宫地图31 int d1[4] = {-1, 0, 1, 0}; //走迷宫的过程中上下方向的偏移值32 int d2[4] = { 0, 1, 0, -1}; //走迷宫的过程中左右方向的偏移值33 34 cout << "请输入第" << z+1 << "个迷宫的行列:" << endl;35 cin >> m >> n;36 37 cout << "请输入第" << z+1 << "个迷宫:" << endl;38 for(i = 0; i < m; i++){ //利用转化的方式,将输入变为数据地图39 cin >> str;40 for(j = 0; j < n; j++){41 if(str[j] == 'H')42 map[i][j] = 1;43 if(str[j] == 'O')44 map[i][j] = 0;45 }46 }//out(map, m, n); //查看迷宫地图47 48 cout << "请输入起点坐标和终点坐标:" << endl;49 cin >> start.x >> start.y >> end.x >> end.y;50 51 start.step = 1;52 map[start.x][start.y] = -1; //将起始点在地图上标记出来53 s.push(start);54 while(!s.empty()){55 point p = s.top();56 57 if(p.x == end.x && p.y == end.y) //判断是否到达终点58 break;59 60 for(i = 0; i < 4; i++){61 int dx = p.x + d1[i]; //下一步的上下位置62 int dy = p.y + d2[i]; //下一步的左右位置63 //判断邻接点是否符合走的要求64 if(dx>=0 && dx
=0 && dy
";92 cout << road[i].x << "," << road[i].y << endl;93 }94 cout << "请输入需要走几个迷宫:" << endl;95 }96 return 0;97 }

 

等待更新。。。

 

转载于:https://www.cnblogs.com/AardWolf/p/9987435.html

你可能感兴趣的文章
nginx 不带www到www域名的重定向
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
人物角色群体攻击判定(一)
查看>>
一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
MySQL(一)
查看>>