C++知识点总结(36):深度优先搜索算法

一、概念

深度优先搜索(简称 DFS),其工作原理为不撞南墙不回头,能深则深,不能则退。最差情况下的时间复杂度为 O ( a n ) O(a^n) O(an) a a a 为可选条数。

二、典型题目

1. 题目

给定一个 n n n m m m 列的迷宫,有些格子可以走,有些有障碍物不能到达。每步可以走到上下左右的格子中。请你判断,是否能从左上角走到右下角。如果能走到输出 YES,否则输出 NO。迷宫中字符为 * 表示迷宫这个格子有障碍物,. 表示没有障碍物。

2. 分析

不能走的地方

  • 迷宫的边界
  • 遇到障碍物
  • 走回头路

DFS 的功能

在一个点遍历 4 4 4 个方向,如果这个方向上的点满足条件,去下一个点。

伪代码

dfs(x, y)
    if (x == n && y == m)
        stop
    if (isRoad(a[?][?]))
        dfs(?, ?);
    ...

3. 参考答案

#include <iostream>
using namespace std;

int n, m; // 迷宫大小
bool flag; // 是否有解 
char Map[25][25]; // 地形图
bool vis[25][25]; // 标记是否走过 
int dx[5] = {
   -1, 0, 1, 0}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值