当前位置: 首页 > article >正文

回溯法 | 无限个for循环?

文章目录

  • 起因
    • 实现
  • 优化


起因

回溯算法,寻找问题的所有解或最优解

最开始遇到这样一个问题,认为可以用几个for循环暴力解决,然而仔细观察后发现,针对不同的输入,我需要的for循环的个数不一样,只能使用递归的方法。
在这里插入图片描述

实现

  • 图解思路与伪代码
    在这里插入图片描述
    因为用回溯法求解的问题的答案 都是 所有可能的单个结果 组成 的 结果集合,我们需要一个个算出结果,再在合适的时候放入结果集合

  • 代码实现

    • 注意
      • 每一层嵌套里的index值是一样的,意味着一层只负责一个”输入数字“
class key_board
{
private:
	const std::vector<std::string> letters = { "", "", "abc", "def", //2 3 
										"ghi", "jkl", "mno",   //4 5 6
										"pqrs", "tuv", "wxyz" };//7 8 9
	std::vector<char> test_digits{ 2,2,3 };   //输入数字,用于测试
public:
	std::vector<std::string> key()
	{
		std::vector<std::string> ret;
		std::string temp_string;
		traceback(test_digits,0,temp_string,ret);
		return ret;
	}
	
/************************关键的回溯部分********************************/
	void traceback(std::vector<char> digits,  //输入数据
				int index, std::string& temp_string,
				std::vector<std::string>& ret)  
				//index 是数字对应的字母索引 temp存放过程中的字符串用于递归 
	{
	/***********终止条件***********/
		if (index == digits.size())
		{
			ret.push_back(temp_string);  //将单个结果放入结果集合中
			return;
		}
	/************遍历每个输入数据对应的字母****************/	
		for (char letter : letters[digits[index]]) 
		{
			temp_string.push_back(letter);
			traceback(digits, index + 1, temp_string, ret);
			temp_string.pop_back();    
		}	
		
	}
};

优化

减枝法

……学习中


http://www.kler.cn/a/370353.html

相关文章:

  • Restormer: Efficient Transformer for High-Resolution Image Restoration解读
  • mfc操作json示例
  • 计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计
  • 4 AXI USER IP
  • [JavaScript] 深入理解流程控制结构
  • 【C++】如何从源代码编译红色警戒2地图编辑器
  • 炫酷的登录框!(附源码)
  • 2024年10月25日Github流行趋势
  • Java性能调优与垃圾回收机制(4/5)
  • Python爬虫系列(一)
  • ios 项目升级极光SDK
  • 从零开始:AI制作PPT工具大比拼
  • 【算法】Kruskal最小生成树算法
  • 杨辉三角 II
  • 软件测试工程师晋升方向,你选对了吗?
  • 【电源优化】计及光伏电站快速无功响应特性的分布式电源优化配置方法
  • 【51单片机】第一个小程序 —— 点亮LED灯
  • 现代 C++ |C++ 基本概况 |Microsoft C/C++ 文档 学习笔记
  • ElasticSearch 在不同集群之间进行数据迁移
  • C++20新特性探索:概念(Concepts)与范围库(Ranges)
  • Springboot 整合 Java DL4J 实现文本分类系统
  • fio 一个 Linux 磁盘压测工具
  • 3D Gaussian Splatting学习日记
  • 【无人机设计与控制】无人机避障,路径规划
  • 推荐一款免费好用的「AI 知识库」工具,可进行RAG问答、文档分析、总结摘要等,自动进行chunk拆分与向量化
  • 树莓派使用Node.js 将蓝牙设置成BLE外设