leetcode 51. N皇后 回溯法求解(c++版本)

news2024/11/26 0:43:48

题目描述

在这里插入图片描述
简单来说就给一个N*N的棋盘 棋盘上的每一列每一行以及每一个对角不能出现两个皇后
因此明确以下几点

  • 要找出所有可能的解法
  • 也是采用回溯法进行求解(具体在下面进行详解)

用下面一张示例图来说明回溯法的思路
在这里插入图片描述
说白了就是进行搜索, 每行进行搜索 行内再进行列搜索(每行的搜索用递归控制,行内每列的搜索用for循环进行控制) 那么当前位置符合我们的要求(行列对角线无其他皇后)将皇后放入
剩下的就是回溯法的正常流程了
那么递归函数的参数是什么呢,首先必须有在哪一行即行号,棋盘大小n也必须有,还有最重要的就是我们的棋盘(在主函数里人为构造)
还有一点就是判断当前位置放入皇后是否合法的问题(在代码注释里)

  • 两个对角(45°和135°)

代码实现

class Solution {
private:
    vector<vector<string>> result;
    // row 代表行号
    void backtracking(int row, int n, vector<string>& chess_board)
    {	// 访问到最后一行即结束
        if(row == n)
        {
            result.push_back(chess_board);
            return;
        }
        for(int i=0; i<n; i++)
        {	// 行内列的遍历搜索 当前位置符合要求即插入
            if(isValid(i, row, chess_board, n))
            {
                chess_board[row][i] = 'Q';
                backtracking(row+1, n, chess_board);
                chess_board[row][i] = '.';  // 回溯
            }
        }
    }
    // 判断当前位置是否有效  col列号  row行号
    bool isValid(int col, int row, vector<string>& chess_board, int n)
    {
        // 列
        for(int i = 0; i<row; i++)
        {	// 列号确定   遍历该列的每一行 
            if(chess_board[i][col]=='Q')
            {
                return false;
            }
        }
        // 45°
        for(int i = row-1, j=col+1; i>=0 && j<n; i--, j++)
        {	// 45 °的对角线位置  重点是 i>=0 && j<n 这个条件并起来狠关键
            if(chess_board[i][j]=='Q')
            {
                return false;
            }
        }
        // 135
        for(int i = row-1, j = col-1; i>=0 && j>=0; i--, j--)
        {	
            if(chess_board[i][j]=='Q')
            {
                return false;
            }
        }
        return true;
    } 
public:
    vector<vector<string>> solveNQueens(int n) {
    	// 创建一个n*n的棋盘用.来填充
        std::vector<std::string> chess_board(n, std::string(n, '.'));
        backtracking(0, n, chess_board);
        return result;
    }
};

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

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

相关文章

java项目-第102期基于ssm的校园二手交易平台-java毕业设计

java项目-第102期基于ssm的校园二手交易平台 【源码请到资源专栏下载】 1、项目简述 Hi&#xff0c;大家好&#xff0c;今天分享的源码是基于ssm的校园二手交易平台。 该交易平台分为两部分&#xff0c;前台和后台。用户在前台进行商品选购以及交易&#xff1b;管理员登录后台可…

python-(6-3-3)爬虫---requests入门(对参数封装)

文章目录一 需求二 分析三 代码四 补充说明一 需求 爬取豆瓣电影的“纪录片”的电影信息数据 二 分析 老规矩&#xff0c;先在网页的“检查”中提取我们需要的信息 如下图所示。在“纪录片”那一页面&#xff0c;选择"network"----“XHR”----“preview”。 我们…

【附源码】Python计算机毕业设计面向社区的购物平台系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

java计算机毕业设计ssm+vue网络考试信息网站

项目介绍 对网络考试系统进行了介绍&#xff0c;包括研究的现状&#xff0c;还有涉及的开发背景&#xff0c;然后还对系统的设计目标进行了论述&#xff0c;还有系统的需求&#xff0c;以及整个的设计方案&#xff0c;对系统的设计以及实现&#xff0c;也都论述的比较细致&…

五大模型看深度学习用于时序预测的最新进展

引言 在以往的时序预测中&#xff0c;大部分使用的是基于统计和机器学习的一些方法。然而&#xff0c;由于深度学习在时间序列的预测中表现并不是很好&#xff0c;且部分论文表述&#xff0c;在训练时间方面&#xff0c;用 Transformer、Informer 、Logtrace 等模型来做时间序…

ESP32 入门笔记06: FreeRTOS+《两只老虎》 (ESP32 for Arduino IDE)

ESP32FreeRTOS Esp32 模块中已经提供了 FreeRTOS&#xff08;实时操作系统&#xff09;固件。 FreeRTOS有助于提高系统性能和管理模块的资源。FreeRTOS允许用户处理多项任务&#xff0c;如测量传感器读数&#xff0c;发出网络请求&#xff0c;控制电机速度等&#xff0c;所有…

旅游推荐系统

摘要 随着社会的发展&#xff0c;人们生活水平的提高&#xff0c;旅游逐渐成为人们生活中的重要活动&#xff0c;2019年国内旅游人数超过60亿人次。并且&#xff0c;旅游业已经成为了我国经济发展的一个重要支柱&#xff0c;近年来我国旅游业对GDP贡献值呈上升趋势。2019年&am…

【附源码】计算机毕业设计java装修服务分析系统设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【数据结构】链表OJ特别篇 —— 面试情景带你深度剖析 环形链表系列问题 复制带随机指针的链表

文章目录0. 前言1. 环形链表2. 环形链表延伸问题3. 环形链表 II4. 复制带随机指针的链表5. 结语0. 前言 Hello&#xff0c;大家好&#xff0c;我是anduin。这期的内容依然是链表OJ。但与前两期不同的是&#xff0c;这次我会模拟面试的情景&#xff0c;由浅入深&#xff0c;以生…

冶金行业数字化供应链管理系统:赋能企业端到端供应链优化,推动行业数字化变革

作为国之重器&#xff0c;冶金行业在国家大基建战略的支持下&#xff0c;迎来了新一轮的发展良机&#xff0c;然而冶金行业整体产能过剩、对于产业链下游依赖严重等情况依然突出&#xff0c;机遇与挑战并存&#xff0c;在此环境下&#xff0c;如何在激烈的竞争中提升企业自身竞…

多对一和一对多的处理P21,P22

多对一&#xff1a; 按照查询嵌套处理&#xff1a; StudentMapper&#xff1a;&#xff08;接口很简单需要返回一个List&#xff09; package com.Li.dao;import com.Li.pojo.Student; import org.apache.ibatis.annotations.Select;import java.util.List;public interface …

无人机和热成像

当它变得可见时&#xff0c;看不见的世界是一个令人惊叹的景象。 热成像就是这样&#xff0c;透过使用专门的摄影机和技术&#xff0c;使看不见的红外光谱可见。 我们周围那个无形的世界隐藏着什么&#xff0c;这是一个完整的隐藏世界。 图片来源&#xff1a;Keith Davis/热成像…

腾讯面试真题 | 没在我八股文列表里。。。

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

零基础自学javase黑马课程第十天

零基础自学javase黑马课程第十天 ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&#x1f39e;2022年11月1日&#x…

【MySQL】深入理解MySQL索引优化器工作原理

本文导读 本文将解读MySQL数据库查询优化器&#xff08;CBO&#xff09;的工作原理。简单介绍了MySQL Server的组成&#xff0c;MySQL优化器选择索引额原理以及SQL成本分析&#xff0c;最后通过 select 查询总结整个查询过程。 一、MySQL 优化器是如何选择索引的 下面我们来…

2022年最新浙江建筑特种工(施工升降机)真题题库及答案

百分百题库提供特种工&#xff08;施工升降机&#xff09;考试试题、特种工&#xff08;施工升降机&#xff09;考试预测题、特种工&#xff08;施工升降机&#xff09;考试真题、特种工&#xff08;施工升降机&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…

web前端期末大作业——基于html+css+javascript学生宿舍管理系统网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

双十一到了,当我用Python采集了电商平台所有商品后发现....

Python采集电商平台写在前面环境及模块案例实现思路代码展示效果展示最后写在前面 这不是双十一快到了&#xff0c;为了以最优惠的价格买到自己想买的商品&#xff0c;我不惜用Python把ya ma xun 所有商品撸了一遍。 环境及模块 使用环境 python 3.8 pycharm 2021 模块及安…

重磅发布 | 更快、更强的 .NET 7

.NET Conf 2022在11⽉8⽇11点正式开始了&#xff0c;为期三天的会议&#xff08;11⽉8-10⽇&#xff09;&#xff0c;围绕 .NET 7 展开。相信各位⼩伙伴都已经开始安装 .NET 7 正式版本以及相关的开发⼯具。这次 .NET 7 围绕传统的 C#&#xff0c;ASP.NET Core, Blazor, .NET M…

如何用python给女神写一封照片情书?亲测表白率100%~

嗨害大家好鸭&#xff01;我是小熊猫❤ 咳咳…大家都问我 是怎么追到我女神的&#xff0c; 斗胆来分享一下俺的小教程&#x1f4a8; 实现步骤 想要实现把情书写在像素中&#xff0c; 那么我们就需要用到pillow这个神器。 众所周知&#xff0c;图片是由无数个像素所组成的&…