dfs深度优先搜索问题
深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为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深度优先搜索问题相关推荐
- 图:DFS(深度优先搜索)图解分析代码实现
文章目录 一.简介 二.图的建立 2.1建立图类 2.2建立图 三.DFS 3.1图解 3.2代码 一.简介 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式. 主要区别在于当到达 ...
- DFS——深度优先搜索基础
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 review DFS--深度优先搜索 的基础知识: [1]深度优先搜索的应用 1.1)深度优先搜索算法描述(转自 ...
- 【算法】蓝桥杯dfs深度优先搜索之排列组合总结
[导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...
- dfs深度优先搜索_图的深度优先搜索(DFS)
dfs深度优先搜索 Depth First Search (DFS) is an algorithm that searches a graph/tree, in a depth-wise manne ...
- 【蓝桥杯C/C++】专题五:DFS深度优先搜索
专题五:DFS深度优先搜索 目录 专题五:DFS深度优先搜索 前言 什么是回溯法 如何理解回溯法 回溯法解决的问题 回溯法模板 1 .回溯函数模板返回值以及参数 2. 回溯函数终止条件 3 .回溯搜索 ...
- DFS(深度优先搜索)算法实现
2 DFS算法 DFS(深度优先搜索)算法,搜索过程是类似于不撞南墙不回头的意思,DFS一般使用堆栈(先入后出)这种数据结构实现,由此一来,以初始起点为中心进行搜索,首先是周围点加入到堆栈中,起始点搜 ...
- “暴力美学1”——DFS深度优先搜索
作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...
- 张三踩瓷砖:C++用DFS深度优先搜索解POJ1979 Red and Black问题
POJ1979 Red and Black 题目链接: POJ1979 Red and Black 简单理解一下题目: 张三站在一个长方形的房间里,房间里铺满了方形瓷砖,瓷砖有红色和黑色两种,他站在其 ...
- 【算法】蓝桥杯dfs深度优先搜索之图连通总结
前言 上两篇文章 → <[算法]蓝桥杯dfs深度优先搜索之排列组合总结> → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,第三次声明下文的 ...
- c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解
采用搜索算法解决问题时,需要构造一个表明状态特征和不同状态之间关系的数据结构,这种数据结构称为结点.不同的问题需要用不同的数据结构描述. 根据搜索问题所给定的条件,从一个结点出发,可以生成一个或多个新 ...
最新文章
- VMware虚拟机三种联网方法及原理
- cisco 交换机配置trunk被拒绝
- java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程
- 线上分享 | AI产品经理之路——从入门到进阶
- SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话
- linux 卸载ava,linux下配置ava环境变量.doc
- 计算机的硬件性能指标(图片部分资源摘自王道考研资料)
- 关于mysql中Join语句的几个问题
- c3p0 服务启动获取连接超时_c3p0获取连接Connection后的Close()---释疑
- 把word excel ppt 导入到右键快捷菜单中
- 计算机打字过程中,关于电脑打字过程中的疑问?
- Url 助手类(Url Helper)
- screen.colorDepth(色彩深度) 和 screen.pixelDepth(像素深度)
- 计算机处理器i3 i5,realme Book笔记本高清渲染图曝光 配置上搭载11代酷睿i3/i5处理器...
- mysql 判断当前星期_MySQL获取星期的函数
- RS码FEC机制的实现方法(基于Luigi Rizzo的代码)
- 移动端 meta 解释
- python图片合成海报
- 有测试狗狗好坏的软件吗,想要养狗的朋友们请一定看完全文,测试一下自己适不适合养狗 ​...
- 工具 | 百度网盘限速解决方案