首页 > 其他分享 >回溯_20230414

回溯_20230414

时间:2023-04-14 20:33:05浏览次数:46  
标签:JFK 机票 20230414 ATL 行程 SFO 回溯

332.重新安排行程

给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。

  • 如果存在多种有效的行程,请你按字符自然排序返回最小的行程组合。例如,行程 ["JFK", "LGA"] 与 ["JFK", "LGB"] 相比就更小,排序更靠前
  • 所有的机场都用三个大写字母表示(机场代码)。
  • 假定所有机票至少存在一种合理的行程。
  • 所有的机票必须都用一次 且 只能用一次。

示例 1:

  • 输入:[["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]
  • 输出:["JFK", "MUC", "LHR", "SFO", "SJC"]

示例 2:

  • 输入:[["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
  • 输出:["JFK","ATL","JFK","SFO","ATL","SFO"]
  • 解释:另一种有效的行程是 ["JFK","SFO","ATL","JFK","ATL","SFO"]。但是它自然排序更大更靠后。

解题思路

映射问题

  • 使用过的机票要进行处理,防止使用过的机票被再次使用甚至是死循环的出现。
  • 因为机票可能有多张(可以从a飞到b多次),且每张机票只能用一次,所以需要将这些可能重复的机票记录下来,可以通过Map<String, Map<String, Integer>>来记录,第一个String存储出发地,第二个String存储目的地,Integer存储剩余次数。
  • 在一开始需要对这个HashMap初始化,且因为需要按照排序选出最前面的,不能简单的使用HashMap,要用TreeMap<String, Integer>()这个数据结构,这是一个升序map,里面的元素按照String的字典顺序排序

回溯问题

  • 用res记录最终的机场遍历顺序,通过取出res的最后一个元素来确定当前的出发地,到map中去寻找可以前往的目的地Map.Entry<String, Integer> target : map.get(last).entrySet(),可以前往则进入下一个地方,不能则遍历到无地方可去为止返回false。
  • res.size() == tickets.size() + 1时遍历结束,返回res作为最终答案。这是回溯的返回条件。
  • 本题回溯需要用boolean,我们需要返回值来判定结果是否是合法的,我们只需要找到一个行程,就是在树形结构中唯一的一条通向叶子节点的路线

51. N皇后

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

解题思路

  • 回溯法:在每行找到一个正确的位置放下皇后之后就可以进入下一层,如果放不下则返回。因此此处的回溯也应该是boolean类型,需要后面的返回值来判定该方案可不可行。同时需要将所有位置都走一遍,因为要找出在n情况下所有皇后的放置情况,可能不止一种
  • 本题通过char[][][][]数组来记录皇后的放置情况有助于后续值的修改,因此在存入List<List<String>>的结果时要进行数据结构的转换,字符数组转字符串可以采用String.copyValueOf(c)或者new String(c)
  • 在判定是否可以放置在该位置时,要从三个方向判断,分别是往上、左45度向上和右45度向上

37. 解数独

编写一个程序,通过填充空格来解决数独问题。

一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 '.' 表示。

解题思路

  • 对每个位置依次进行判定直到所有的格子都填了数字为止,当情况错误时则需要返回修正,因此也是一个boolean类型的回溯。当遇到本身就填有数字的情况要直接进入下一个状态,不要对当前格子进行修改。
  • 在判定合法的时候行列都很好判断,在判定九宫格时需要一点小技巧:通过(row / 3) * 3和(column / 3 )* 3来判定当前位置所处的九宫格的起点(左上角位置)

标签:JFK,机票,20230414,ATL,行程,SFO,回溯
From: https://www.cnblogs.com/xccx-0824/p/17319858.html

相关文章

  • 20230414指定IP联网不通日志
    正常情况路由记录1<1毫秒<1毫秒<1毫秒192.168.0.121ms<1毫秒<1毫秒192.168.1.134ms3ms3ms100.69.64.14*3ms3ms211.138.190.1535***请求超时。626ms......
  • 每日会议20230414
     进度汇报:吕金帅:张博文:自周一起到现在,完成了商品表的数据库的连接,完成了高德地图导航接口的连接,在fragment中嵌入listview展示商品收益和广告收益。遇到的问题是:不知道如何记录数据库记录改变的次数,从而进行商品数量上的变化。赵纪旭: 具体目标:要实现三方数据库的统一,我们......
  • 回溯_20230413
    90.子集II给定一个可能包含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入:[1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]解题思路:通过回溯法遍历出子集,保证res不包含该path的情况下,将path添加进res中(此处应注......
  • 回溯理论基础及leetcode
    回溯与递归相辅相成;回溯是递归的副产品,只要有递归就会有回溯。回溯函数也就是递归函数,指的都是一个函数。回溯搜索法纯暴力搜索解决的问题组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条......
  • UVa 10344 23 out of 5 (全排列枚举&回溯)
    10344-23outof5Timelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1285Yourtaskistowriteaprogramthatcandecidewhetheryoucanfindanarithmetic......
  • UVa 129 Krypton Factor (回溯好题)
    129-KryptonFactorTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=65YouhavebeenemployedbytheorganisersofaSuperKryptonFactorContestinwhichcontestantshaveveryhighmental......
  • UVa 11210 Chinese Mahjong (模拟&枚举&回溯)
    11210-ChineseMahjongTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2151Mahjong()isagameofChineseoriginusuallyplayedbyfourpersonswithtilesresemblingdominoesandbearing......
  • 【LeetCode回溯算法#extra01】集合划分问题【火柴拼正方形、划分k个相等子集、公平发
    火柴拼正方形https://leetcode.cn/problems/matchsticks-to-square/你将得到一个整数数组matchsticks,其中matchsticks[i]是第i个火柴棒的长度。你要用所有的火柴棍拼成一个正方形。你不能折断任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须使用一次。如......
  • Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
    场景1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(IterativeMethod)无法使用公式一次求解,而需要使用重复结构(即循环)......
  • 回溯算法与树遍历
    树的遍历于回溯算法树的遍历是指按照一定的顺序访问树中的节点,以便遍历树中的所有节点。常见的树的遍历方式有三种,分别是前序遍历(Pre-orderTraversal)、中序遍历(In-orderTraversal)和后序遍历(Post-orderTraversal)。前序遍历先访问根节点,然后依次访问左子树和右子树;中序遍历先访......