蓝桥杯练习笔记(十八)

蓝桥杯练习笔记(十八)

一、用辅助栈来优化递归深度过大的问题

在这里插入图片描述

  • 输入示例
0000100010000001101010101001001100000011
0101111001111101110111100000101010011111
1000010000011101010110000000001011010100
0110101010110000000101100100000101001001
0000011010100000111111001101100010101001
0110000110000000110100000000010010100011
0100110010000110000000100010000101110000
0010011010100110001111001101100110100010
1111000111101000001110010001001011101101
0011110100011000000001101001101110100001
0000000101011000010011111001010011011100
0000100000011001000100101000111011101100
0010110000001000001010100011000010100011
0110110000100011011010011010001101011011
0000100100000001010000101100000000000010
0011001000001000000010011001100101000110
1110101000011000000100011001001100111010
0000100100111000001101001000001010010001
0100010010000110100001100000110111110101
1000001001100010011001111101011001110001
0000000010100101000000111100110010101101
0010110101001100000100000010000010110011
0000011101001001000111011000100111010100
0010001100100000011000101011000000010101
1001111010010110011010101110000000101110
0110011101000010100001000101001001100010
1101000000010010011001000100110010000101
1001100010100010000100000101111111111100
1001011010101100001000000011000110110000
0011000100011000010111101000101110110001

在这里插入图片描述

  • 这是我一开始写的dfs搜索与第一行相连的0的个数(占用内存过大):
#include <iostream>
#include<bits/stdc++.h>
using namespace std;vector<string> a;
int cnt=0;void dfs(int n,int m)
{if(n<0||m<0||n>29||m>39){return;}if(a[n][m]=='1'||a[n][m]=='2')return;if(a[n][m]=='0'){cnt++;a[n][m]='2';}dfs(n-1,m);//纵向dfs(n+1,m);dfs(n,m-1);dfs(n,m+1);
}int main()
{// 请在此输入您的代码for(int i=0;i<40;i++){string s;cin>>s;a.push_back(s);}for(int i=0;i<10;i++){dfs(0,i);//横向}
cout<<cnt;return 0;
}
  • 然后gpt给出了优化意见:用辅助栈去代替递归的过程

在你提供的代码中,出现了内存超限的问题。这是因为你使用的递归深度过大,导致栈空间不足以容纳如此多的函数调用。
对于这个问题,一种解决方法是将递归改为迭代,使用循环来实现深度优先搜索。通过使用一个辅助栈来模拟递归的过程,可以避免递归深度过大导致的栈溢出。
以下是修改后的代码示例:

#include <iostream>
#include <vector>
#include <stack>
using namespace std;vector<string> a;
int cnt = 0;void dfs(int n, int m)
{stack<pair<int, int>> st;st.push(make_pair(n, m));while (!st.empty()){int x = st.top().first;int y = st.top().second;st.pop();if (x < 0 || y < 0 || x >= 30 || y >= 40){continue;}if (a[x][y] == '1' || a[x][y] == '2'){continue;}if (a[x][y] == '0'){cnt++;a[x][y] = '2';}st.push(make_pair(x - 1, y)); // 向上st.push(make_pair(x + 1, y)); // 向下st.push(make_pair(x, y - 1)); // 向左st.push(make_pair(x, y + 1)); // 向右}
}int main()
{// 请在此输入您的代码for (int i = 0; i < 40; i++){string s;cin >> s;a.push_back(s);}for (int i = 0; i < 10; i++){dfs(0, i); // 横向}cout << cnt;return 0;
}

这里的思想是递归本身也是利用了栈去维护自己递归信息。所以直接在dfs函数里就用一个栈来模拟函数的递归。

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

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

相关文章

新增用户信息应该考虑什么?

前置数据校验 1. 用户的信息的合法性&#xff0c;如手机号&#xff0c;邮箱等jsr303检验 2. 用户数据脱敏处理&#xff0c;如密码 3. 短信验证码验证 &#xff08;随机数生成 redis 短信服务&#xff09; 4. 用户信息的账号唯一性校验 5. 给用户授权&#xff0c;如角色或其它…

QT打包生成.exe可执行文件

QT打包生成.exe可执行文件 程序运行图标如何设置快捷方式显示图标QT打包成可执行文件将可执行文件打包成安装包程序运行图标 如何生成如下图标? 首先将你的图标(ico文件)放入当前工程目录,即含有.pro文件的同级目录 右击项目,选择ADD New,选择Qt Resource File, 这是一个…

吴恩达2022机器学习专项课程(一) 5.7 检测梯度下降是否收敛

问题预览/关键词 什么是梯度下降收敛&#xff1f;哪些方法可以检测梯度下降是否收敛&#xff1f;什么是学习曲线&#xff1f;曲线上升代表什么&#xff1f;什么原因造成的&#xff1f;如何检测梯度下降是否收敛&#xff1f;多少次迭代&#xff0c;梯度下降会收敛&#xff1f;什…

C++:初步接触C++(2)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习C&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 内联函数1.概念2.特性 auto关键字1.auto简介2.auto的使用细则3.auto不能推导的场景 基于范围…

算法刷题记录 Day40

算法刷题记录 Day40 Date: 2024.04.06 kamma 56. 多重背包 #include<bits/stdc.h> using namespace std;int main(){int n, c;while(cin>>c>>n){vector<int> weights(n, 0);vector<int> values(n, 0);vector<int> knums(n, 0);for(int …

一文掌握python面向对象

面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它将现实世界的问题抽象成类和对象,通过封装、继承和多态等特性实现程序设计的模块化与灵活性。Python作为一门支持OOP的高级语言,其面向对象的特性使得代码更加简洁、易读且易于维护。本文旨在全…

RTThread studio 驱动开发

rtthread 驱动使用的两种情况 rtthread studio 自动生成 由 RT Thread Studio 自动生成&#xff0c;无需修改任何文件或者简单定义几个宏即可直接使用的驱动&#xff0c;如 GPIO&#xff0c;UART&#xff0c;I2C&#xff0c;SPI&#xff0c;SDIO 和 ETH 等。 使用 RT-Thread S…

Python - 基础知识

变量 语法&#xff1a; a 10 #意思是创建一个a变量&#xff0c;把10存放到a变量中。 #这里说明一下&#xff0c;#在Python中是是注释符 print(a) #print是打印函数 变量是一个可以发生改变的量&#xff0c;变量是用来区分不同数据的&#xff0c;可以指向一个内存空间&…

如何定位和优化程序CPU、内存等性能之巅

如何定位和优化程序CPU、内存等性能之巅 摘要 性能优化指在不影响系统运行正确性的前提下&#xff0c;使之运行得更快&#xff0c;完成特定功能所需的时间更短&#xff0c;或拥有更强大的服务能力。本文将介绍性能优化的基本概念以及如何定位和优化程序中的CPU、内存和IO瓶颈…

信息泄露漏洞的JS整改方案

引言 &#x1f6e1;️ 日常工作中&#xff0c;我们经常会面临线上环境被第三方安全厂商扫描出JS信息泄露漏洞的情况&#xff0c;这给我们的系统安全带来了潜在威胁。但幸运的是&#xff0c;对于这类漏洞的整改并不复杂。本文将介绍几种可行的整改方法&#xff0c;以及其中一种…

指挥中心控制台厂家定制控制台技术规范全方位指南

指挥中心控制台作为现代化管理的重要组成部分&#xff0c;在整个企业的运行中起着重要作用&#xff0c;为了保证指挥中心的正常运行&#xff0c;控制台的定制不可缺少&#xff0c;那么指挥中心控制台厂家定制控制台技术规范是什么? 1. 结构性能规范&#xff1a;控制台需采用优…

kmeans聚类sklearn实现(Python实验)

Kmeans毫无疑问&#xff0c;好用又“便宜”的算法&#xff0c;经常在很多轻量化场景中实现。所谓的“聚类”&#xff08;Clustering&#xff09;&#xff0c;就是通过欧氏距离找哪些点构成一个簇。假设我们空间中有一堆点&#xff0c;通过肉眼大概可以看出有两簇&#xff0c;思…

jmeter压测websocket协议

一、jmeter 安装websocket插件 1、选项--插件管理 2、搜索WebSocket Samplers by Peter Doornbosch插件 进行安装 3、 重启 jmeter 二、jmeter压测websocket协议实战 2.1、以网站为例&#xff1a; websocket在线测试 1、断开连接 2、打开F12&#xff0c;查看WS数据 3、…

DragonIM龙通讯

前言 龙通讯是一款C/S架构的即时通讯软件&#xff0c;实现了用户注册、登录、好友私聊、群聊&#xff08;文字、表情、文件&#xff09;&#xff0c;群文件上传/下载&#xff0c;群公告&#xff0c;朋友圈&#xff08;可点赞和评论&#xff09;&#xff0c;AI聊天&#xff0c;…

剪切助手-高颜值的跨平台剪切板工具

高颜值的跨平台剪切板工具来了&#xff01;&#xff01; http://t.csdnimg.cn/xKB3B 出于我的一些日常使用需求以及在对比了其他剪切板软件后&#xff0c;我决定做一个跨平台的高颜值剪切板工具《剪切助手》&#xff01; 废话不多说&#xff0c;你可以来这里 下载体验 它&…

记录一次云主机云监控客户端故障

场景&#xff1a;客户弹性云主机的云监控客户端本来正常。 但是昨天下午突然不行了&#xff0c;提示故障。 仔细排查发先&#xff0c;ps -ef|grep telescop 进程是在的 于是查看正常的/etc/resolv.conf里面的dns信息&#xff0c;发现故障的少了一天dns信息&#xff0c; 100.…

day76 jquery

知识点: 1 在HTML中引入jQuery 2 jQuery中就绪函数 3 jQuery中选择器 4 使用jQuery获取表单元素的值 及标签中间的内容 5 jQuery中获取标签属性 6 jQuery设置和获取标签样式 ----------------------------------- 一 在HTML中引入jQuery 1/*! jQuery…

RFID涉密载体柜 RFID智能文件柜系统

涉密载体管控RFID智能柜&#xff08;载体柜DW-G101R&#xff09;通过对涉密物资、设备进行RFID唯一标识并放置于RFID设备涉密物资柜柜体&#xff0c;通过定位每台设备每件涉密物资的位置&#xff0c;实现涉密物资审批、自助借还、防盗等出入库全流程自动化管理。主要管理对象移…

解码AVC(h264)裸流为yuv420P写入文件

使用AVC裸流解析器解析AVC裸流文件&#xff0c;然后解码为yuv420P格式写入文件 // 解码h264 #include "myLog.h" #include <iostream>extern "C" { #include "libavcodec\avcodec.h" }#define VIDEO_INBUF_SIZE 20480 // 最初读取数据大…

redis 集群模式(redis cluster)介绍

目录 一 redis cluster 相关定义 1&#xff0c; redis cluster 是什么 2&#xff0c;redis 集群的组成 3&#xff0c;集群的作用 4&#xff0c;集群架构图 二 Redis集群的数据分片 1&#xff0c;哈希槽是什么 2&#xff0c;哈希槽如何排布 3&#xff0c;Redis集…