回溯
lark_ying
清醒时工作,糊涂时读书,独处时思考,烦恼时睡觉~
展开
-
回溯之全排列Ⅰ、Ⅱ、子集Ⅰ、Ⅱ、组合 总结 C++/Python3
经典回溯算法模板:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择【通过flag标志位判断数组中某一元素是否已被包含】class Solution {public: vector<vector<int&g原创 2020-06-16 12:09:35 · 145 阅读 · 0 评论 -
leetcode 1219-黄金矿工 C++
你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0。为了使收益最大化,矿工需要按以下规则来开采黄金:每当矿工进入一个单元,就会收集该单元格中的所有黄金。矿工每次可以从当前位置向上下左右四个方向走。每个单元格只能被开采(进入)一次。不得开采(进入)黄金数目为 0 的单元格。、矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。思路:带有记忆的原创 2020-05-29 11:17:09 · 633 阅读 · 0 评论 -
剑指offer 13-机器人的运动范围 C++
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:回溯法1)从(0,0)开始走,每成功走一步标记当前位置为true,然后从当前位置往四个方向探索,返回1 + 4 个方向的探索值之和2)探索时,判断原创 2020-05-28 17:04:26 · 178 阅读 · 0 评论 -
剑指offer 12-矩阵中的路径 C++
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如:a b c es f c sa d e e矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。思路:1)根据给定数组,初始化一个标志位数组,初始化原创 2020-05-28 16:12:54 · 200 阅读 · 0 评论