首页 > 编程语言 >学习笔记(算法)——路径之谜(蓝桥杯官网)(dfs,回溯)

学习笔记(算法)——路径之谜(蓝桥杯官网)(dfs,回溯)

时间:2024-11-14 11:45:26浏览次数:3  
标签:int t2 dfs t1 蓝桥 ++ && 官网

学习+1

学习目标:

蓝桥杯省奖

学习内容:

每日一题
题目源于蓝桥杯官网

题目描述

在这里插入图片描述
在这里插入图片描述

解题思路

1.先定义最大行列值,输入行列值,行列靶数,答案数组,访问标记数组,辅助数组
2.定义dfs(深度优先搜索)函数

2.1记录当前位置
2.2如果到达右下角&&行列只剩一靶
2.2.1做循环:如果前面的靶子都打完,退出函数(检查)
2.2.2做循环:输出答案路径
2.3标记为true,行列靶数减一
2.4循环得到新位置,判断是否可以递归
2.5回溯

3.主函数

3.1输入矩阵大小,列,行
3.2调用dfs
3.3结束

代码

#include<iostream>
using namespace std;

const int N = 25;  //定义一个常量,表示最大值
int n, r[N], c[N], ans[N * N];  //定义输入的n行n列,行列靶数数组,答案数组
bool re[N][N];  //定义访问标记数组
int a[] = { -1,0,1,0 }, b[] = { 0,1,0,-1 };  //辅助数组(表示顺时针方向)

//深度优先搜索(dfs)函数
void dfs(int x, int y, int pos) {
    ans[pos] = x * n + y;  //记录当前位置
    //如果走到了最后一格且最后一格的北方和西方各只剩一靶
    if (x == n - 1 && y == n - 1 && r[n - 1] == 1 && c[n - 1] == 1) {
        //检查除最后的一行一列外其他靶数是否大于0,若等于0,执行下一步,若大于0,则结束函数,无解
        for (int i = 0; i < n - 1; i++) {
            if (r[i] > 0 || c[i] > 0) return;
        }
        //输出正确路径
        for (int i = 0; i <= pos; i++) {
            cout << ans[i] << " ";
        }
        return;
    }
    re[x][y] = true;
    r[x]--;
    c[y]--;
    //得到新位置并判断该位置是否可用
    for (int k = 0; k < 4; k++) {
        int t1 = x + a[k];
        int t2 = y + b[k];
        if (!re[t1][t2] && t1 >= 0 && t1 < n && t2 >= 0 && t2 < n && r[t1]>0 && c[t2]>0) {
            //调用递归
            dfs(t1, t2, pos + 1);
        }
    }
    //回溯
    ans[pos] = 0;
    re[x][y] = false;
    r[x]++;
    c[y]++;
}

int main() {
    cin >> n;
    //注意:先输入每一行的靶数,但他是按列排列的,所以先输入列
    for (int i = 0; i < n; i++) cin >> c[i];
    for (int i = 0; i < n; i++) cin >> r[i];
    dfs(0, 0, 0);
    return 0;
}

总结

这道题主要运用的知识点有dfs和回溯,其中dfs一般用来解迷宫,本题的打箭靶算是这类题目的变形,本质还是和原来一样,只要熟练掌握知识点,就能灵活运用!加油呀,宝子们!!

学习时间:

周三

学习产出:

蓝桥杯的真题*1
dfs熟练度+1
回溯熟练度+1

标签:int,t2,dfs,t1,蓝桥,++,&&,官网
From: https://blog.csdn.net/gyl233/article/details/143762067

相关文章

  • 企业“3D官网”主要有哪些功能?
    3D官网可以作为企业营销和推广的重要渠道之一。通过分享和传播3D官网链接,企业可以吸引更多的潜在客户关注和了解企业的产品或服务。同时,3D官网还可以与社交媒体、搜索引擎等营销渠道相结合,形成全方位的营销和推广体系。企业3D官网具备多种功能,以下是其中一些主要功能:1、3D展......
  • 字符串Java--- [蓝桥杯 2020 省 AB3] 日期识别
    题目描述小蓝要处理非常多的数据,其中有一些数据是日期。在小蓝处理的日期中有两种常用的形式:英文形式和数字形式。英文形式采用每个月的英文的前三个字母作为月份标识,后面跟两位数字表示日期,月份标识第一个字母大写,后两个字母小写,日期小于 1010 时要补前导 00。11 ......
  • P8680 [蓝桥杯 2019 省 B] 特别数的和 java
    题目描述小明对数位中含有 22、00、11、99 的数字很感兴趣(不包括前导 00),在 11 到 4040 中这样的数包括 11、22、99、1010 至 3232、3939 和 4040,共 2828 个,他们的和是 574574。请问,在 11 到 nn 中,所有这样的数的和是多少?输入格式输入一行包含一个整数 ......
  • 在 Windows 系统中,DFS (Distributed File System) 是一种用于文件共享和管理的技术,能
    在Windows系统中,DFS(DistributedFileSystem)是一种用于文件共享和管理的技术,能够让多个服务器上的共享文件夹(共享资源)通过一个统一的命名空间来访问。DFS主要通过DFS命名空间和DFS复制这两个组件来实现。DFS相关命令和功能在Windows中,DFS相关的命令通常是通过......
  • Z-library数字图书馆镜像地址/官网入口及客户端app (长期更新)
    Z-Library是一家电子图书馆,被誉为全球最大的科学图书和学术文献免费资源之一。它创办于2009年,截至2022年10月1日,已收录超过1129万本图书和8483万篇学术文章。从各种知名文学著作,理工学科,人文艺术、到学术论文等应有尽有!支持PDF、epub、mobi等多种格式图书资源下载绝对是你找书的不......
  • 任天堂强势打击Switch模拟器 Ryujinx官网已被掌控
    任天堂针对Switch模拟器的打击行动持续升级!继今年2月对Yuzu模拟器提起诉讼并获得240万美元赔偿后,近日又成功迫使Ryujinx模拟器项目关闭,并已掌控Ryujinx官网域名。10月1日,Ryujinx模拟器开发者gdkchan在其官方Discord频道发布声明,称任天堂与其达成协议,要求其停止项目开发并......
  • 学校官网应该使用哪种SSL证书?
    学校官网在选择SSL证书时,应考虑多个因素,包括网站的性质、安全要求、预算以及证书的管理便捷性等。以下是关于学校官网应使用哪种SSL证书的详细分析:多域名和子域名需求:如果学校官网有多个子域名或者不同的域名需要同时进行SSL加密,可以选择多域名证书(SAN/UCC证书)或多用途证书(WildC......
  • 2025蓝桥杯(单片机)备赛--蜂鸣器、继电器设备控制(三)
    一、蜂鸣器和继电器的控制蜂鸣器和继电器:也是通过P06-P04这两个IO口来进行控制,再看和连接,P0---74HC573---ULN2003-RELAY/BUZZER,出现了新的器件,先看ULN2003,查看数据手册,发现是一个能输出大电流的芯片,里面有反向器,会使输出取反,虽然继电器:低电平工作;蜂鸣器:低电平......
  • SpringBoot响应式企业官网开发2mutj 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,资讯信息,类型,产品信息,产品类型,招聘信息,招聘类型,投递信息开题报告内容一、研究背景与意义随着互联网技术的飞速发展,企业官网已成为展示企业......
  • 蓝桥杯真题——good-sequence(C语言)
     问题描述一个序列 [b1,b2,...,bm]若对于 2≤i≤m满足 bi≤b1,则称为好序列。现在给定 [a1,a2,...,an],求对于该序列的每一个后缀 [ak,ak+1,...,an](1≤k≤n)最少能划分成多少个好序列。输入格式第一行包含一个整数 n ,表示数组 a 的长度。第二行包含 nn 个......