C++题目_逃生路线总数(dfs)

news2024/9/20 22:33:06

题目描述

2021年夏天,LSH开开心心的骑着电动车出去玩,结果一不留神,他骑着电动车进入了一只恶犬的领地。恶犬发现它的领地被LSH侵犯了,立马去追LSH,准备咬他一大口。LSH慌忙逃窜,但是他的电动车电量即将耗尽,现在请你帮忙计算一下,LSH能成功逃脱恶犬领地的路线一共有多少条?

输入描述

测试样例由多组测试数据组成。每组测试数据第一行输入5个整数 n , m ( 1 <= n,m <= 50) , t ( 1 <= t <= 50 ), i ( 0 <= i < n ) , j ( 0 <= j < m )
我们把恶犬的领地看做一个二维矩阵,其中 n 和 m代表恶犬的领地范围的行和列
t 代表LSH的电动车最多还能移动多少格 (只能上下左右移动,移动一次 t - 1 ,当 t 为 0 时则LSH不能移动)
i 和 j代表LSH被恶犬发现时的坐标

输出描述

输出LSH能够逃离恶犬的领地范围的路线总数,只要逃出恶犬领地范围(超出边界)则视为成功逃脱,由于答案很大,所以需要你需要将答案对 1000000007 取模。

测试样例1

输入数据

复制

2 2 2 0 0

输出数据

复制

6

提示

1.下图是对样例的解释
2.LSH一旦跑出边界,他是不会再回来了(他也不傻)
3.只要LSH还没跑出边界,他可以重复经过他之前经过的网格

#include<bits/stdc++.h>
using namespace std;

这部分代码是常见的包含头文件的部分,<bits/stdc++.h> 是一个万能头文件,包含了常用的标准库头文件。

int n, m, sum = 0;
int fx[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};

这部分代码定义了几个变量。n 和 m 分别表示狗领地的列长和行宽。sum 是一个计数器,用于记录 LSH 能够成功逃脱恶犬领地的路线数。fx 是一个二维数组,用于表示四个方向的偏移量。每个方向的偏移量分别是 (1, 0)(0, 1)(-1, 0) 和 (0, -1)

void dfs(int x, int y, int t) {
    if (x < 0 || x >= n || y < 0 || y >= m) {
        sum++;
        return;
    }
    if (n - t >= 0 || m - t >= 0) {
        return;
    }
    if (t == 0) return;
    for (int i = 0; i < 4; i++) {
        int xx = x + fx[i][0];
        int yy = y + fx[i][1];
        dfs(xx, yy, t - 1);
    }
}

这部分代码定义了一个名为 dfs 的递归函数,用于进行深度优先搜索。函数的参数 x 和 y 表示当前位置的坐标,t 表示 LSH 的电动车还能移动的格数。

在函数的开头,我们首先判断当前位置 (x, y) 是否超出了狗领地的边界。如果超出了边界,说明 LSH 能够成功逃脱恶犬领地的路线数加一,并返回。

接下来,我们判断如果 n - t >= 0 或者 m - t >= 0,说明 LSH 到达不了边界,直接返回。这是一种剪枝的优化,可以减少不必要的递归。

然后,我们判断如果 t 的值为 0,说明电量已经用完,直接返回。

最后,我们使用一个循环遍历四个方向。对于每个方向,我们计算下一个位置 (xx, yy),它是当前位置 (x, y) 加上方向数组 fx 中对应方向的偏移量。然后,我们递归调用 dfs 函数,将 (xx, yy) 作为下一步的位置,t - 1 作为剩余电量。

int main() {
    int x, y, t;
    while (cin >> n >> m >> t >> x >> y) {
        sum = 0;
        dfs(x, y, t);
        cout << sum;
    }
    return 0;
}

这部分代码是主函数。在主函数中,我们首先定义了变量 xy 和 t,分别表示 LSH 所在的行、列和电动车还能移动的格数。

然后,我们使用一个循环来读取多组测试数据。在每次循环中,我们先将计数器 sum 的值重置为 0,然后调用 dfs 函数,计算 LSH 能够成功逃脱恶犬领地的路线数。最后,我们输出 sum 的值。

这样,代码就完成了。

完整代码(加注释)

#include<bits/stdc++.h>//万能头
using namespace std;//命名空间
int n,m,sum=0;// n 狗领地的列长 m 狗领地的行宽 sum LSH能成功逃脱恶犬领地的路线数
int fx[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//定义方向数组fx
void dfs(int x,int y,int t){//定义dfs函数,输入x,y,t
    if(x<0 || x>=n|| y<0 ||y>=m){//如果x<=0 || x>n|| y<=0 ||y>m则判为超出边界
        sum++;//LSH能成功逃脱恶犬领地的路线数加1
        return ;//返回
    }
    if(n-t>=0 || m-t>=0){//如果n-t>=0 || m-t>=0就说明到达不了边,直接return   剪支
        return;//返回
    }
    if(t==0)return;//如果电量没了直接返回
    for(int i=0;i<4;i++){//循环四种方向
        int xx=x+fx[i][0];//定义xx
        int yy=y+fx[i][1];//定义yy
        dfs(xx,yy,t-1);//继续递归dfs
    }
}
int main(){//主函数
    int x,y,t;//x LSH所在地的行 y LSH所在地的列 t LSH的电动车最多还能移动多少格
    while(cin>>n>>m>>t>>x>>y/*输入n,m,x,y,t*/){//由于有多组测试数据组成所以用循环输入
        sum=0;//使sum等于0
        dfs(x,y,t);//执行dfs函数
        cout<<sum;//直接输出sum
    }
    return 0;//返回值
}

完整代码(不加注释)

#include<bits/stdc++.h>
using namespace std;

int n, m, sum = 0;
int fx[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};

void dfs(int x, int y, int t) {
    if (x < 0 || x >= n || y < 0 || y >= m) {
        sum++;
        return;
    }
    if (n - t >= 0 || m - t >= 0) {
        return;
    }
    if (t == 0) return;
    for (int i = 0; i < 4; i++) {
        int xx = x + fx[i][0];
        int yy = y + fx[i][1];
        dfs(xx, yy, t - 1);
    }
}

int main() {
    int x, y, t;
    while (cin >> n >> m >> t >> x >> y) {
        sum = 0;
        dfs(x, y, t);
        cout << sum;
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1953403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电力电子中的电大、电小尺寸?

01 前言 大家好&#xff0c;这期我们聊一下电力电子中的电大尺寸和电小尺寸。对于大部分电力电子应用工程师来说&#xff0c;可能并不太清楚电尺寸的概念。因为要谈到电尺寸就要考虑电信号的传播速度&#xff0c;一般会在高频、超高频电路中有所涉及&#xff0c;而大部分硅基…

【优秀python系统毕设】基于Python flask的气象数据可视化系统设计与实现,有LSTM算法预测气温

第一章 绪论 1.1 研究背景 在当今信息爆炸的时代&#xff0c;气象数据作为重要的环境信息资源&#xff0c;扮演着关键的角色。然而&#xff0c;传统的气象数据呈现方式存在信息量庞大、难以理解的问题&#xff0c;限制了用户对气象信息的深入理解和利用。因此&#xff0c;基…

[算法题]非对称之美

题目链接: 非对称之美 题目要求求最长非回文子字符串的长度, 那么如果字符串本身不是回文串, 那么长度就是该字符串本身的长度: 如果字符串本身是一个回文串, 那么只需把该字符串去掉一个字母后, 该字符串就不是回文串了, 长度也就是原本的长度减 1, 即: 所以想要求最长非回文…

BCH码误码率ber性能仿真(MATLAB)

BCH码 不同于奇偶校验码只能检验数据传输是否出错&#xff0c;BCH码可以实现对数据的检验和纠错 BCH&#xff08;n&#xff0c;k&#xff09;中的n代表总码元&#xff0c;k代表有效码元&#xff0c;相应的n-k即代表纠错码元 本文着重比较分析BCH(255,207),BCH(255,131),BCH(255…

iOS 自定义 仿苹果地图 半屏滑动效果控件

前言 在前一篇文章AI编程探索- iOS 实现类似苹果地图 App 中的半屏拉起效果我们通过三方库实现了这个功能。可是我发现这个三方不能加阴影效果。也许是我不知道怎么加吧&#xff01;于是只有自己搞咯&#xff01; 拆解功能 这功能给人在感觉上&#xff0c;有点麻烦&#xff0…

奇怪的Excel单元格字体颜色格式

使用VBA代码修改单元格全部字符字体颜色是个很简单的任务&#xff0c;例如设置A1单元格字体颜色为红色。 Range("A1").Font.Color RGB(255, 0, 0)有时需要修改部分字符的颜色&#xff0c;如下图所示&#xff0c;将红色字符字体颜色修改为蓝色。代码将会稍许复杂&am…

【MySQL进阶之路 | 高级篇】MVCC三剑客:隐藏字段,Undo Log,ReadView

1. 再谈隔离级别 我们知道事务有四个隔离级别&#xff0c;可能存在三种并发问题&#xff1a; 在MySQL中&#xff0c;默认的隔离级别是可重复读&#xff0c;可以解决脏读和不可重复读的问题&#xff0c;如果仅从定义的角度来看&#xff0c;它并不能解决幻读问题。如果我们想要解…

如何用find命令按文件大小快速查找并美化输出显示

背景 在系统中使用find命令查找大于20MB的文件非常简单&#xff0c;但默认情况下&#xff0c;输出结果中只显示文件路径&#xff0c;而不显示文件大小。如下图所示&#xff1a; 如果输出中能够同时显示文件大小&#xff0c;并且对内容进行适当的着色&#xff0c;这将显著提高其…

“论软件测试中缺陷管理及其应用”写作框架,软考高级论文,系统架构设计师论文

原创范文 软件缺陷指的是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误&#xff0c;或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。在目前的软件开发过程中&#xff0c;缺陷是不可避免的。软件测试是发现缺陷的主要手段&#xf…

【信创】udisk2服务异常导致U盘使用中自动移除问题解决

原文链接&#xff1a;【信创】udisk2服务异常导致U盘使用中自动移除问题解决 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在信创终端操作系统上由于udisk2服务异常导致U盘等移动设备在使用中自动移除问题的排查文章。udisk2是一个管理存储设备的服务&#xf…

全球性“微软蓝屏”事件及其对网络安全和系统稳定性的深远影响

近日&#xff0c;一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件&#xff0c;不仅成为科技领域的热点新闻&#xff0c;更是一次对全球IT基础设施韧性与安全性的深刻检验。这次事件源于美国电脑安全技术公司“众击”提供的一个带有“缺陷”的软件更新&#xff0c;它如…

2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年起重信号司索工(建筑特殊工种)证模拟考试题库及起重信号司索工(建筑特殊工种)理论考试试题是由安全生产模拟考试一点通提供&#xff0c;起重信号司索工(建筑特殊工种)证模拟考试题库是根据起重信号司索工(建筑特…

学习硬件测试02:系统框图讲解+时钟树讲解+标准程序框架详解(P47~P49)

一、系统框图讲解 二、时钟树讲解 三、标准程序框架详解

记录|博图中VB脚本和子程序之间的区别?

目录 前言一、VB脚本1. 基本认知2. Function类型中的参数3. 对比看Function和Sub4. 运行VB脚本 更新时间 前言 VB脚本函数与子程序的区别 看到博途中有个VB脚本&#xff0c;感觉和编程相关&#xff0c;想知道下VB脚本能干什么&#xff1f;能否解决生成日志等问题。 一、VB脚本 …

selenium----CSS表达式选择元素

前面我们学习了根据 id、class属性、tag名 选择元素。 如果我们要选择的 元素 没有id、class 属性&#xff0c;或者有些我们不想选择的元素 也有相同的 id、class属性值&#xff0c;怎么办呢&#xff1f;这时候我们通常可以通过 CSS selector 语法选择元素。 选择元素 通过 …

我澄清下,大数据界面虽然有点花,但对趋势的判断还是很准的!

我澄清下&#xff0c;大数据界面虽然有点花&#xff0c;但对趋势的判断还是很准的&#xff01; 艾斯视觉的观点认为&#xff1a;在这个充满不确定性的世界里&#xff0c;大数据就像一位智者&#xff0c;透过那些令人眼花缭乱的界面&#xff0c;总能以它独到的洞察力&#xff0…

大学计算机专业主要课程及概要介绍

大学计算机专业主要课程及概要介绍 大学计算机专业是一门涵盖广泛领域的学科&#xff0c;旨在培养学生在计算机科学与技术方面的理论知识与实践能力。该专业课程设置丰富多样&#xff0c;涵盖了从基础理论到高级应用的多个方面。以下是一些主要的课程及其概要介绍&#xff1a;…

C语言的周末小练习

周末小练习&#xff1a; 1.确认基础类型所占用的内存空间。 #include <stdio.h>int main() {printf("char: %u byte(s)\n", sizeof(char));printf("short: %u byte(s)\n", sizeof(short));printf("int: %u byte(s)\n", sizeof(int));pr…

【Maven学习】-1. 简介

文章目录 Maven学习1. 简介1.1 介绍1.2 安装1.2.1 下载1.2.2 安装maven1.2.3 配置镜像源(加快下载)1.2.4 IDEA配置maven 1.3 基于IDEA进行Maven工程构建Maven工程的GAVP创建Maven工程项目结构说明 1.4 Maven生命周期1.4.1 介绍1.4.2 命令讲解编译(mvn compile)删除(mvn clean)测…

26 Python序列结构

Python 中常用的序列结构有列表、元组、字典、字符串、集合等。 从是否有序这个角度看&#xff0c;Python 序列可以分为有序序列和无序序列&#xff1b;从是否可变来看&#xff0c;Python 序列可以分为可变序列和不可变序列两大类。 生成器对象和 range、map、enumerate、filte…