深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。

实现:1.需要一个方向(即在矩阵种,按某种方式进行寻找(顺时针或逆时针))。

           2.回溯,寻找其他可能,进行比较。寻找最小路径。


问题:迷宫由m行n列的单元组成(m,n都小于50),每个单元格要么为空地,要么为障碍物。在此迷宫中,输入起始坐标和终点坐标,寻找从起点到终点的最短路径。(默认为无边界。)

输入:第一行输入m,n代表m行n列。

下面m行每行输入n个,代表迷宫。

之后输入起始坐标和重点坐标。

输出:起点坐标到重点坐标的最短路径。

实现:1.首先确定寻找方式,即顺序针寻找还是逆时针寻找。

2.确定后,对每次运动进行判断,即没没走过且不为障碍物即可走,不然就顺时针方向 走,直至走到终点处。

3.在第一次寻找到后,开始回溯,寻找其他路径,更新最短路径。

           4.输出最短路径。

备注:对于迷宫,标记1为空,2为障碍。标记数组:0为未访问,1为已访问(即已走过。)(标记使用标记数组实现。)。2代表障碍。

测试样例:

5 4
 1 1 2 1 
 1 1 1 1 
 1 1 2 1
 1 2 1 1 
 1 1 1 2
 1 1 4 3

输出结果:

代码:

#include<cstdio>
using namespace std;
int m,n,p,q,min=9999999;
int a[100][100]; //1为空,2为障碍。
int v[100][100];//0未,1访问
void dfs(int x,int y,int step){if(x==p && y==q){if(step<min)min=step;return;}//顺时针试探//右if(a[x][y+1]==1&&v[x][y+1]==0){v[x][y+1]=1;dfs(x,y+1,step+1);v[x][y+1]=0;}//下if(a[x+1][y]==1&&v[x+1][y]==0){v[x+1][y]=1;dfs(x+1,y,step+1);v[x+1][y]=0;}//左if(a[x][y-1]==1&&v[x][y-1]==0){v[x][y-1]=1;dfs(x,y-1,step+1);v[x][y-1]=0;}//上 if(a[x-1][y]==1&&v[x-1][y]==0){v[x-1][y]=1;dfs(x-1,y,step+1);v[x-1][y]=0;}return;
}
/*5 41 1 2 1 1 1 1 1 1 1 2 11 2 1 1 1 1 1 21 1 4 3
*/
int main(){int startx,starty;scanf("%d%d",&m,&n);for(int i=1;i<=m;i++){for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);}scanf("%d%d%d%d",&startx,&starty,&p,&q);v[startx][starty]=1;dfs(startx,starty,0);printf("%d",min);return 0;
}

dfs深度优先搜索问题相关推荐

  1. 图:DFS(深度优先搜索)图解分析代码实现

    文章目录 一.简介 二.图的建立 2.1建立图类 2.2建立图 三.DFS 3.1图解 3.2代码 一.简介 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式. 主要区别在于当到达 ...

  2. DFS——深度优先搜索基础

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 review DFS--深度优先搜索 的基础知识: [1]深度优先搜索的应用 1.1)深度优先搜索算法描述(转自 ...

  3. 【算法】蓝桥杯dfs深度优先搜索之排列组合总结

    [导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...

  4. dfs深度优先搜索_图的深度优先搜索(DFS)

    dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...

  5. 【蓝桥杯C/C++】专题五:DFS深度优先搜索

    专题五:DFS深度优先搜索 目录 专题五:DFS深度优先搜索 前言 什么是回溯法 如何理解回溯法 回溯法解决的问题 回溯法模板 1 .回溯函数模板返回值以及参数 2. 回溯函数终止条件 3 .回溯搜索 ...

  6. DFS(深度优先搜索)算法实现

    2 DFS算法 DFS(深度优先搜索)算法,搜索过程是类似于不撞南墙不回头的意思,DFS一般使用堆栈(先入后出)这种数据结构实现,由此一来,以初始起点为中心进行搜索,首先是周围点加入到堆栈中,起始点搜 ...

  7. “暴力美学1”——DFS深度优先搜索

    作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...

  8. 张三踩瓷砖:C++用DFS深度优先搜索解POJ1979 Red and Black问题

    POJ1979 Red and Black 题目链接: POJ1979 Red and Black 简单理解一下题目: 张三站在一个长方形的房间里,房间里铺满了方形瓷砖,瓷砖有红色和黑色两种,他站在其 ...

  9. 【算法】蓝桥杯dfs深度优先搜索之图连通总结

    前言 上两篇文章 → <[算法]蓝桥杯dfs深度优先搜索之排列组合总结>      → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,第三次声明下文的 ...

  10. c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解

    采用搜索算法解决问题时,需要构造一个表明状态特征和不同状态之间关系的数据结构,这种数据结构称为结点.不同的问题需要用不同的数据结构描述. 根据搜索问题所给定的条件,从一个结点出发,可以生成一个或多个新 ...

最新文章

  1. VMware虚拟机三种联网方法及原理
  2. cisco 交换机配置trunk被拒绝
  3. java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程
  4. 线上分享 | AI产品经理之路——从入门到进阶
  5. SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话
  6. linux 卸载ava,linux下配置ava环境变量.doc
  7. 计算机的硬件性能指标(图片部分资源摘自王道考研资料)
  8. 关于mysql中Join语句的几个问题
  9. c3p0 服务启动获取连接超时_c3p0获取连接Connection后的Close()---释疑
  10. 把word excel ppt 导入到右键快捷菜单中
  11. 计算机打字过程中,关于电脑打字过程中的疑问?
  12. Url 助手类(Url Helper)
  13. screen.colorDepth(色彩深度) 和 screen.pixelDepth(像素深度)
  14. 计算机处理器i3 i5,realme Book笔记本高清渲染图曝光 配置上搭载11代酷睿i3/i5处理器...
  15. mysql 判断当前星期_MySQL获取星期的函数
  16. RS码FEC机制的实现方法(基于Luigi Rizzo的代码)
  17. 移动端 meta 解释
  18. python图片合成海报
  19. 有测试狗狗好坏的软件吗,想要养狗的朋友们请一定看完全文,测试一下自己适不适合养狗 ​...
  20. 工具 | 百度网盘限速解决方案

热门文章

  1. 保研夏令营数学复习(高数 概率 线代)
  2. jsr基本使用@valid和@validation
  3. python 密码库_(01)Python密码库Cryptography探究学习---简介和入门
  4. 深入理解Amazon Alexa Skill(三)
  5. 如何利用 Python 批量合并 Excel?
  6. STL全特化 偏特化 成员特化
  7. 计算机系的同学应该有更高的雄心壮志
  8. 阿里云部署Java网站和微信开发调试心得技巧(下)
  9. cassandra vs. voldemort
  10. vscode关闭讨厌的单词拼写检查