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

代码随想录算法训练营第三十天 | 332.重新安排行程 51. N皇后 37. 解数独 总结

打卡第30天,回溯算法第二刷。

今日任务

  • 332.重新安排行程
  • 51.N皇后
  • 37.解数独
  • 总结

332.重新安排行程

给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。
所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。
例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前。
假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。

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

代码随想录

class Solution {
public:unordered_map<string, map<string, int>> targets;bool backtracking(int ticketNum, vector<string>& res) {if(res.size() == ticketNum + 1) return true;for(pair<const string, int>& target : targets[res[res.size() - 1]]) {if(target.second > 0) {res.push_back(target.first);target.second--;if (backtracking(ticketNum, res)) return true;target.second++;res.pop_back();}}return false;}vector<string> findItinerary(vector<vector<string>>& tickets) {targets.clear();vector<string> res;for(const vector<string>& vec: tickets) {targets[vec[0]][vec[1]]++;}res.push_back("JFK");backtracking(tickets.size(), res);return res;}
};

51.N皇后

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

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

代码随想录

class Solution {
public:vector<vector<string>> res;bool isVaild(int row, int col,int n, vector<string>& chessborad) {for(int i = 0; i < row; i++) {if(chessborad[i][col] == 'Q') return false;}for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if(chessborad[i][j] == 'Q') return false;}for(int i = row  - 1, j = col + 1; i >= 0 && j < n; i--, j++) {if(chessborad[i][j] == 'Q') return false;}return true;}void backtarcking(int n, int row, vector<string>& chessborad) {if(row == n) {res.push_back(chessborad);return;}for(int col = 0; col < n; col++) {if(isVaild(row, col, n, chessborad)) {chessborad[row][col] = 'Q';backtarcking(n, row + 1, chessborad);chessborad[row][col] = '.';}}}vector<vector<string>> solveNQueens(int n) {res.clear();vector<string> chessborad(n, string(n, '.'));backtarcking(n, 0, chessborad);return res;}
};

37.解数独

编写一个程序,通过填充空格来解决数独问题。
数独的解法需 遵循如下规则:
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
数独部分空格内已填入了数字,空白格用 ‘.’ 表示。

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

代码随想录

在这里插入图片描述
一个for循环遍历棋盘的行,一个for循环遍历棋盘的列,一行一列确定下来之后,递归遍历这个位置放9个数字的可能性!

class Solution {
public:bool backtracking(vector<vector<char>>& board) {for(int i = 0; i < board.size(); i++) {for(int j = 0; j < board.size(); j++) {if(board[i][j] != '.') continue;for(char c = '1'; c <= '9'; c++) {if(isValid(board, i, j, c)) {board[i][j] = c;if(backtracking(board)) return true;board[i][j] = '.';}}return false;}}return true;}bool isValid(vector<vector<char>>& board, int row, int col, char c) {for(int i = 0; i < 9; i++) {if(board[row][i] == c) return false;}for(int i = 0; i < 9; i++) {if(board[i][col] == c) return false;}for(int i = row - (row % 3); i < row - (row % 3) + 3; i++) {for(int j = col - (col % 3); j < col - (col % 3) + 3; j++) {if(board[i][j] == c) return false;}}return true;}void solveSudoku(vector<vector<char>>& board) {backtracking(board);}
};
http://www.lryc.cn/news/40827.html

相关文章:

  • Windows权限提升—MySQL数据库提权
  • 使用旧电脑玩Linux
  • Linux安装EMQX(简洁版)
  • 基于STM32 + FPGA 的软体机器人的 CAN总线运动控制器的设计
  • ROC曲线和AUC值
  • 【vue.js】在网页中实现一个金属抛光质感的按钮
  • android实现评论区功能
  • Java每日一练(20230319)
  • Redis缓存双写一致性
  • 【2023-Pytorch-检测教程】手把手教你使用YOLOV5做交通标志检测
  • Java中的二叉树
  • 基于 gma 绘制古代洛阳 5 大都城遗址空间分布地图
  • 分析 Spring 的依赖注入模式
  • IntelliJ IDEA创建Servlet
  • Spring Boot如何让自己的bean优先加载
  • LeetCode分类刷题----动态规划
  • 今年好像没有金三银四了?
  • 【C++】入门知识之 函数重载
  • 文心一言发布,你怎么看?chatGPT
  • 字符函数和字符串函数【上篇】
  • list的模拟实现(模仿STL)
  • 05-STM32F1 - 串行通信SPI
  • 【Pytorch】Tensor的分块、变形、排序、极值与in-place操作
  • 数组栈的实现
  • *p++,*(p++),*++p,(*p)++区别?
  • 又一个线上偶发问题-系统短暂无法获取到Redis连接
  • [ 系统安全篇 ] 拉黑IP - 火绒安全软件设置IP黑名单 windows使用系统防火墙功能设置IP黑名单
  • MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
  • 算法竞赛必考算法——动态规划(01背包和完全背包)
  • 基于深度学习的农作物叶片病害检测系统(UI界面+YOLOv5+训练数据集)