(DFS) Depth-First Search入门

Depth-First Search简称DFS,深度优先搜索。 深度优先,优先在于深度,尽量往最深处走。 原理:从某一节点开始走,若遇到分支,选择某条路冲到底,遇到分支就随便选只管冲冲冲,直到冲到底再无选择,然后按原路返回如果再遇到分支且有没走过的路,依然冲冲冲。直到全部都搜索完。 芙芙 DFS 就如《葬送的芙莉莲》中芙莉莲与勇者探索迷宫的精神,攻略迷宫要将迷宫全部探索完才是迷宫寻宝的真正魅力!!!

如题 【入门】扫地机器人 我们根据题意可以知道n与m的值为2~9,所以二维数组可以开a[11][11]即使nm为最大时依然可以在周围留一圈0,反正判断时越界等问题。 根据题意我们需要设置一个判断规则: 按右下左上 的优先级进行判断。

下面给出AC代码

#include<iostream>
#include<vector>
using namespace std;
const int N = 11;//因为n和m是2~9的数所以周围留下了一圈

int n,m;
vector<vector<int> >a(N,vector<int>(N, 0));

//递归深搜
void dfs(int x, int y, int k)//为(x,y)赋k值
{
    a[x][y] = k;
    //按照题目要求的右下左上的顺序依次设计判断x与y的加减依次对应了右下左上
    if(y + 1 <= m && a[x][y + 1] == 0){
        dfs(x, y + 1, k + 1);
    }else if(x + 1 <= n && a[x + 1][y] == 0){
        dfs(x + 1, y, k + 1);
    }else if(y - 1 > 0 && a[x][y - 1] == 0){
        dfs(x, y - 1, k + 1);
    }else if(x - 1 > 0 && a[x - 1][y] == 0){
        dfs(x - 1, y, k + 1);
    }
}

int main()
{
    std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    //输入行列
    cin >> n >> m;
    //赋初值
    dfs(1, 1, 1);//依题意设计函数dfs为(1,1)赋值为1,dfs函数赋值的点是我们搜索开始的最初点
    //输出
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            printf("%3d",a[i][j]);
        }
        printf("\n");
    }
}

更新于 2024/05/13

评论

评论 0

暂无评论
全部文章
music

521755ldsdl.jpg

关于

QAQ

C++离散化

为什么要离散化处理? 数据过于多时难以表示数组下标 离散化是什么? 可以类比哈希表 离散化就像哈

教程超详细xcpc滚榜教程

首先需要导出比赛的表格 1.处理表格 最终效果如下图 自行添加的列有id,judged,solv

C++快速幂

快速幂 用于快速求a^b的算法 思想:拆分 例:求2^13 等价于求 2^1 * 2^4 * 2

C++高精度运算(加减乘除)

在程序中高精度加法和高精度减法的运算本质是模拟我们在小学就学过的运算规则,也是我们平时用的运算规

C++素数筛法(埃氏筛法、线性筛法)

素数筛法:用于筛选出素数 核心思想:用一个数筛选其余的数 普通筛法: 时间复杂度为O(nlogn

C++二叉树的建立与遍历

二叉树是一种非线性数据结构. 二叉树 由节点构成,每个节点包含节点值和指向左节点和右节点的指针.

C++链表

链表是一种逻辑结构上的线性表,物理结构上的非线性表 链表由许多节点组成,每个节点有对应的值和指向

C++C++实现顺序表

顺序表,一种线性表,因此顺序表是线性的. 因为顺序表在物理结构与逻辑结构都是连续的.意味着在内存

PythonPython基础

标识符 Python中标识符由字母,数字,下划线组成. 字母区分大小写,不能以数字开头,以下划线

算法并查集

并查集 :并为合并(合并两个节点),查为查询(查询根节点),集是一个集合. 联通块问题 //各个

K 随时打开ESC 关闭

阅读设置

设置仅保存在当前设备。

主题

背景

文章布局