DFS题单以及模板汇总

2023-05-16

此文章是为了记录自己学习DFS算法以及记录写过的DFS题单汇总,持续补充

  • P1605 迷宫

迷宫

题目描述

给定一个 N × M N \times M N×M 方格的迷宫,迷宫里有 T T T 处障碍,障碍处不可通过。

在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。

输入格式

第一行为三个正整数 N , M , T N,M,T N,M,T,分别表示迷宫的长宽和障碍总数。

第二行为四个正整数 S X , S Y , F X , F Y SX,SY,FX,FY SX,SY,FX,FY S X , S Y SX,SY SX,SY 代表起点坐标, F X , F Y FX,FY FX,FY 代表终点坐标。

接下来 T T T 行,每行两个正整数,表示障碍点的坐标。

输出格式

输出从起点坐标到终点坐标的方案总数。

样例 #1

样例输入 #1

2 2 1
1 1 2 2
1 2

样例输出 #1

1

提示

对于 100 % 100\% 100% 的数据, 1 ≤ N , M ≤ 5 1 \le N,M \le 5 1N,M5 1 ≤ T ≤ 10 1 \le T \le 10 1T10 1 ≤ S X , F X ≤ n 1 \le SX,FX \le n 1SX,FXn 1 ≤ S Y , F Y ≤ m 1 \le SY,FY \le m 1SY,FYm

AC代码:

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class Main {


    static int n;
    static int m;
    static int N = 10;
    static int T;
    static int[][] arr = new int[N][N];
    static boolean[][] vis = new boolean[N][N];
    static int[][] dir = {{1,0}, {-1,0}, {0,1}, {0,-1}};
    static int res = 0;
    static int x0;
    static int y0;
    static int x;
    static int y;

    public static void main(String[] args) throws IOException {
        Read read = new Read();
        n = read.nextInt();
        m = read.nextInt();
        T = read.nextInt();
        // (x0,y0) -> 起始点坐标
        // (x,y) -> 终点坐标
        x0 = read.nextInt();
        y0 = read.nextInt();
        x = read.nextInt();
        y = read.nextInt();
        for (int i = 1 ; i <= n; i++) {
            for (int j =  1; j <= m; j++) {
            	// 赋予默认值1
                arr[i][j] = 1;
            }
        }
        for (int k = 1 ; k <= T; k++) {
        	// 标记障碍物为0
            int a1 = read.nextInt();
            int a2 = read.nextInt();
            arr[a1][a2] = 0;
        }
        dfs(x0,y0);
        System.out.println(res);
    }

    public static void dfs(int i,int j) {
    	// 如果到达终点退出循环
        if (i == x && j == y) {
            res++;
            return;
        } else {
        	// 针对(i,j)坐标每次进行上下左右的探索
            for (int k = 0 ; k < 4; k++) {
                int dx = i + dir[k][0];
                int dy = j + dir[k][1];
                // 如果当前坐标(dx,dy)没有被访问过,且(dx,dy)是非障碍物点
                if (dx >= 1 && dx <= n && dy >= 1 && dy <= m && arr[dx][dy] == 1 && !vis[dx][dy]) {
                	// 标记(i,j)已经遍历过
                    vis[i][j] = true;
                    dfs(dx, dy);
                    // 还原(i,j)
                    vis[i][j] = false;
                }
            }
        }

    }

}

class Read {

    StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));

    public int nextInt() throws IOException {
        st.nextToken();
        return (int) st.nval;
    }

    public double nextDouble() throws IOException {
        st.nextToken();
        return st.nval;
    }

    public String nextString() throws IOException {
        st.nextToken();
        return st.sval;
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DFS题单以及模板汇总 的相关文章

  • 2023最新一文学会fastdfs单节点部署(含安装包镜像包)

    1 实验环境 镜像版本 麒麟服务器镜像V10SP2 镜像下载地址 链接 https pan baidu com s 11BopM7FsmvUFud D68J7Rg pwd 1234 提取码 1234 安装包下载地址 链接 https pan
  • 力扣刷题-47.全排列Ⅱ、深度优先搜索

    给定一个可包含重复数字的序列 返回所有不重复的全排列 深度优先搜索 DFS 深度优先搜索就是在每一步对每一种可能的选择一条道走到底 然后再回过头尝试另外一种选择 深度优先搜索的关键是要考虑 当前这一步 该如何做 至于 下一步 该怎么做和当前
  • 网易笔试:给出n个物品,每个物品都有自己的价值,每个物品只有一件,这些物品需要分给两个人,要求分配完之后,两个人的物品价值相同。分配完成之后,丢弃剩下的物品,求最少要丢弃多少物品。

    题目描述 给出n个物品 每个物品都有自己的价值 每个物品只有一件 这些物品需要分给两个人 要求分配完之后 两个人的物品价值相同 分配完成之后 会丢弃剩下的物品 求最少要丢弃多少物品 输入 输入第一行为总的测试数据个数 第二行为物品个数n 第
  • Tempter of the Bone【DFS+奇偶剪枝】scanf会WA!!!

    题目链接HDU1010 多好的一道题 交scanf会WA cin一发过 我WA了30 次 惊是这样的BUG 我就说我推的公式怎会错呢 如果有字体缩小的方式 我要把上面那行缩小些 先看大家WA 可真是一道有趣的题目 首先 有这样的图推出奇偶剪
  • DFS时间复杂度

    DFS算法是一一个递归算法 需要借助一个递归工作栈 故它的空间复杂度为 O N O N O N 遍历图的过程实质上是对每个顶点查找其邻接点的过程 其耗费的时间取决于所采用结构 邻接表表示时 查找所有顶点的邻接点所需时间为
  • 七段码 (爆搜 + 并查集)

    文章目录 七段码 AC思路 AC代码 七段码 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小蓝要用七段码数码管来表示一种特殊的文字 图片描述 上图给出了七段码数码管的一个图示 数码管中一共有 77 段可
  • 图的遍历方法——DFS和BFS

    DFS类似于树的先序遍历 因此可以用递归实现 BFS类似于树的层次遍历 因此可以用队列实现 说明 下面代码中图的存储方式是邻接表 关于邻接表和邻接矩阵可看邻接表和邻接矩阵 1 深度优先遍历 Depth First Search 思想 从图中
  • 算法---LeetCode 200. 岛屿数量

    1 题目 原题链接 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成 此外 你可以假设该网格的四条边均被水包围 示例 1 输入 gr
  • 【数据结构与算法学习】图的深度优先遍历(DFS算法)

    目录 一 什么是图的遍历 二 深度优先遍历 DFS 的基本思想 三 深度优先遍历 DFS 的步骤详解 四 深度优先遍历 DFS 的代码实现 一 什么是图的遍历 图的遍历 指的是从图中的任一顶点出发 对图中的所有顶点访问一次且只访问一次 图的
  • 基础算法题——德邦国王(dfs、剪枝)

    德邦国王 题目还算中规中矩 就是剪枝比较麻烦 解题思路 dfs 剪枝 移动次数不超过设定值 M 若有解 则后面的步骤不可大于该解的值 不断查询完美矩阵与当前矩阵不同的个数 t t 1 为最快可将当前矩阵移动成完美矩阵的步数 若 t 1 已经
  • LeetCode-679.24 点游戏、深度优先搜索算法DFS

    来源 力扣 LeetCode 题目分析 括号运算符仅仅表达了一个运算顺序 可以不用考虑 实际的运算类型就 4 种 一共只有 4 个数 因此所有组合的可能性是有限的 DFS 算法就是对当前的所有可能的操作进行枚举 当前的操作即从可选的数字中挑
  • 路径搜索问题

    之前碰到的很多问题都可以归结为路径搜索问题 就是求两点之间的路经 1 是否存在路径 2 求任意一条路径 3 求所有路径 求是否有路径和任意一条路径的时候 和正常遍历一样 一个点被mark之后不再访问 因为如果这个结点到终点有路径 之前就应该
  • 【算法学习笔记】17:DFS与BFS

    1 DFS 深度优先搜索常用于解决需要给出所有方案的问题 因为它的搜索顺序就是能够得到一个完整的搜索路径 方案 后回退再去搜索其它的方案 1 1 例题 排列数字 由于要求所有排列的方案 可以每次从 1 n 1 n 1 n里拿一个数字 然后记
  • [Wikioi 2808][NOIP 1998普及组]二的幂次方---HBNU的童鞋过来看看

    题目描述 Description 任何一个正整数都可以用2的幂次方表示 例如 137 2 7 2 3 2 0 同时约定次方用括号来表示 即a b可表示为a b 由此可知 137可表示为 2 7 2 3 2 0 进一步 7 2 2 2 2 0
  • [Codeforces 1286B] Numbers on Tree

    Evlampiy was gifted a rooted tree The vertices of the tree are numbered from 1 to n Each of its vertices also has an int
  • 不同岛屿的数量

    694 不同岛屿的数量 这道题要给出不同岛屿的数量 最直观的想法就是对发现的不同岛屿进行序列化 然后把序列化结果存到HashSet 那怎么序列化呢 其实比较类似于二叉树的序列化 记录遍历顺序 方向 这里用 1 2 3 4 代表上下左右 1
  • Leetcode【DFS BFS】

    Leetcode 200 岛屿数量 题目 解题 思路 DFS解法 BFS解法 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成
  • 递归、加法原理,如何分解问题(独立且完备的划分)

    加法原理适用于做一件事有n种独立不相交且完备的方向 每个方向上有ai种方案 则总的方案数就是 a1 a2 an 例题 把n个数分为k个非空子集 有多少种分法 分解问题 第一个集合里放多少个数把原问题的解分成了独立且完备的若干方向 分别解每个
  • 数据结构——图的DFS(深度优先遍历)- C语言代码实现

    图的深度优先遍历的基本思想 从图中某顶点v出发 1 访问顶点v 2 依次从v的未被访问的邻接点出发 对图进行深度优先遍历 直至图中和v有路径相通的顶点都被访问 3 若此时图中尚有顶点未被访问 则从一个未被访问的顶点出发 重新进行深度优先遍历
  • 无向图染色问题-dfs剪枝

    无向图染色问题 问题描述 给定一个无向图 要求用最少的颜色将节点染色 限制是不能让相邻节点染上相同的颜色 算法 使用dfs 为节点分配不同的颜色进行尝试 计算每种分配所需的颜色数 最终进行回溯 取得最小的颜色数 代码 C include

随机推荐

  • leetcode刷题(六)——快乐数

    编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 xff1a 对于一个正整数 xff0c 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 xff0c 也可能是 无限循环 但始终变不到 1 如果这个
  • leetcode刷题(七)——移动零

    给定一个数组 nums xff0c 编写一个函数将所有 0 移动到数组的末尾 xff0c 同时保持非零元素的相对顺序 请注意 xff0c 必须在不复制数组的情况下原地对数组进行操作 示例 1 输入 nums 61 0 1 0 3 12 输出
  • STM32 HAL库 串口接收不定长数据(帧头)

    写的比较垃圾 xff0c 将就着用 欢迎各位大佬指导 xff0c 我这里要用串口中断接收两种帧头的数据 xff0c 1 以0x0D 0x0A为帧头的数据 2 xff0c 以0x55 0xA5为帧头的数据 两数据包帧头不同 大小不同 其中定义
  • freeRTOS系列教程之【第一章】FreeRTOS概述与体验

    文章目录 教程目录1 1 FreeRTOS目录结构1 1 FreeRTOS目录结构1 2 核心文件1 3 移植时涉及的文件1 4 头文件相关 1 4 1 头文件目录1 4 2 头文件 1 5 内存管理1 6 Demo1 7 数据类型和编程规
  • 【RTOS的最通俗理解】行业大佬用一篇文章带你快速理解RTOS

    文章目录 单片机 RTOS 架构 1 RTOS的概念 1 1 用人来类比单片机程序和RTOS 1 1 1 我无法一心多用1 2 2 我可以一心多用 1 2 程序简单示例 2 架构的概念 2 1 用人来类比电子产品2 2 要深入理解RTOS就
  • 开源网络模拟器ns-3 架构与实践

  • 四、freeRTOS_同步互斥与通信概述

    目录 1 同步与互斥的概念 2 同步的例子 xff1a 有缺陷 3 互斥的例子 xff1a 有缺陷 4 通信的例子 xff1a 有缺陷 5 FreeRTOS的解决方案 对应程序 xff1a 12 freertos example sync
  • 五、freeRTOS_队列的使用

    目录 1 队列的理论讲解 1 1 常规操作 2 队列的常规使用 3 队列集 1 队列的理论讲解 1 1 常规操作 队列的简化操如入下图所示 xff0c 从此图可知 xff1a 队列可以包含若干个数据 xff1a 队列中有若干项 xff0c
  • 从零开始的leetcode刷题(使用python)Day1

    从零开始用python刷leetcode xff0c 随手记录一些tips 1 哈希表 xff08 leetcode第一题两数之和 xff09 哈希表也叫作散列表 xff0c 数据结构提供了键 xff08 key xff09 和值 xff0
  • [深度学习] 神经网络中的 batch 和 epoch

    参考文章为 神经网络中Batch和Epoch之间的区别是什么 xff1f Sample Sample是单个数据 即有意义的数据的最小单位 训练数据集由许多Sample组成 batch batch是一个人为设定的超参数 batch的意思是 批
  • Windows开启ftp服务-使用Xlight FTP Server

    适用于windows系统 xff0c 使用Xlight FTP Server软件 下载地址 xff1a 点击此处下载 1 将下面的软件 xff0c 安装在电脑上 2 开启ftp服务 点击程序主界面左上角 xff0c 默认端口号为21 xff
  • 控制理论中的常用定义与定理

    以下内容摘自 应用非线性控制 对于自治系统 xff08 在本书中与定常系统等价 xff09 一句话总结 xff1a 初始状态的足够小能够保证系统状态范数的任意小 不变集理论可以在V导为半负定时推导出渐进稳定的结论 xff0c 但只适用于自治
  • centos8服务器安装nginx

    安装nginx 安装依赖包 yum span class token parameter variable y span span class token function install span gcc zlib zlib devel
  • 部署hexo遇到报错ERROR Deployer not found: git的解决办法

    部署hexo遇到报错ERROR Deployer not found git的解决办法 今天部署hexo的时候遇到一个报错 hexo c span class token operator amp amp span hexo g span
  • npm install hexo-renderer-sass时报错解决办法

    npm install hexo renderer sass时报错 在安装配置hexo博客的时候 xff0c 有的主题需要安装 span class token function npm span span class token func
  • 实用工具网站推荐

    速写板 可以随时开一个web网页进行书面草稿的网站
  • kaggle 免费gpu,optuna学习,python中*的用法

    kaggle import optuna def obj trial x 61 trial suggest float 34 x 34 7 7 y 61 trial suggest float 34 y 34 7 7 return x 1
  • BFS题单总结

    BFS题单汇总 此文章用来记录遇到的经典的从某个点到达某个边界或者指定点的BFS题目 xff0c 将持续更新 1926 迷宫中离入口最近的出口 span class token keyword class span span class t
  • Java/C++输入输出特定格式模板总结

    Java输出每个数字占5个空格 xff0c 此输出模式见洛谷1443题 span class token class name System span span class token punctuation span out span c
  • DFS题单以及模板汇总

    此文章是为了记录自己学习DFS算法以及记录写过的DFS题单汇总 xff0c 持续补充 P1605 迷宫 迷宫 题目描述 给定一个 N M N times M N M 方格的迷宫 xff0c 迷宫里有