海珠做网站公司深圳网络推广推荐

张小明 2026/1/10 5:37:29
海珠做网站公司,深圳网络推广推荐,河北建设网上办事大厅,晋城网站建设科技有限公司C实现N皇后问题#xff08;回溯法详解OJ适配#xff09;一、核心问题分析不同行#xff1a;由于每个皇后占一行#xff0c;可简化为“逐行放置”#xff08;每行仅放一个皇后#xff09;不同列#xff1a;同一列不能有两个皇后不同对角线#xff1a;主对角线#xff0…C实现N皇后问题回溯法详解OJ适配一、核心问题分析不同行由于每个皇后占一行可简化为“逐行放置”每行仅放一个皇后不同列同一列不能有两个皇后不同对角线主对角线x-y为常数和副对角线xy为常数不能有两个皇后二、解题思路回溯法N皇后问题的核心解法是回溯法本质是“尝试-回溯-再尝试”的暴力搜索优化思路初始化n×n的空棋盘用.表示空位置逐行放置皇后第i行放置一个皇后标记其攻击范围行、列、对角线递归处理下一行重复步骤2若递归到第n行所有皇后放置完成则收集当前棋盘作为有效解回溯撤销当前皇后的放置和攻击范围标记尝试当前行的下一个列位置遍历所有可能的位置直到收集完所有有效解。关键优化用“数字字符标记不同皇后的攻击范围”确保回溯时能精准恢复棋盘状态避免不同皇后的攻击范围混淆。三、完整代码实现OJ适配版以下代码已封装为LeetCode/OJ要求的Solution类入口函数为solveNQueens(int n)可直接复制提交#include iostream #include vector #include string using namespace std; void conver(vectorvectorchar a, vectorvectorstring b) { vectorstring temp; for ( auto char_row : a) { for (char c : char_row) { if (c ! Q c ! .) { c .; } } string str(char_row.begin(), char_row.end()); temp.push_back(str); } b.push_back(temp); } void change(int x, int y, char c, vectorvectorchar a,int n) { for (int i 0; i n; i) { if (a[x][i] .) a[x][i] c; if(a[i][y].) a[i][y] c; } for (int i -(n - 1); i n - 1; i) { if (x i n x i 0 y i 0 y i na[xi][yi].) a[x i][y i] c; if (x - i n x - i 0 y i n y i 0a[x-i][yi].) a[x - i][y i] c; } } void restore(char c, int x, int y,int n,vectorvectorchara) { for (int i 0; i n; i) { for (int j 0; j n; j) { if (a[i][j] c) { a[i][j] .; } } } } void queen( int num, int n, vectorvectorchar a, vectorvectorstring b) { if (num n) { conver(a, b); return; } for (int i 0; i n; i) { if (a[num][i] .) { change(num, i, 0num, a, n); a[num][i] Q; queen(num 1, n, a, b); restore(0num, num, i, n, a); a[num][i] .; } } return; } int main() { int n 4; vectorvectorchar a(n, vectorchar(n)); vectorvectorstring b; for (int i 0; i n; i) { for (int j 0; j n; j) { a[i][j] .; } } int num 0; queen(num , n, a, b); for (const auto str_arr : b) { for (const auto str : str_arr) { cout strendl; } cout endl--------------- endl; } }四、核心代码模块解析1. 主函数int main()作用OJ的统一入口负责初始化棋盘、调用递归函数、返回最终结果。初始化n×n的棋盘a所有位置设为.空创建b存储所有有效解法二维字符串数组每个子数组是一个完整的棋盘调用核心递归函数queen从第0行num0开始放置皇后。2. 核心递归函数queen(int num, int n, vectorvectorchar a, vectorvectorstring b)作用实现回溯法的核心逻辑——逐行放置皇后、递归、回溯。终止条件num n表示已处理完第0~n-1行所有皇后放置完成调用conver转换结果并收集逐行遍历num表示当前处理的行遍历当前行的所有列i从0到n-1放置皇后若当前位置a[num][i] .空则用0 num生成当前皇后的专属标记如第0行皇后用0第1行用1调用change标记攻击范围将当前位置设为Q放置皇后递归处理下一行num1回溯调用restore恢复攻击范围标记将当前位置设回.撤销皇后。3. 攻击范围标记change(int x, int y, char c, vectorvectorchar a, int n)作用标记皇后(x,y)的攻击范围行、列、主对角线、副对角线用字符c专属标记标记避免与其他皇后混淆。标记当前行遍历第x行所有列空位置设为c标记当前列遍历第y列所有行空位置设为c标记主对角线xi, yix-y为常数需判断边界0≤nxn0≤nyn标记副对角线x-i, yixy为常数同样判断边界。4. 回溯恢复restore(char c, int x, int y, int n, vectorvectorchar a)作用撤销当前皇后的攻击范围标记——将所有标记为c的位置恢复为.确保回溯后棋盘状态正确。关键由于每个皇后的标记c是唯一的0~n-1恢复时不会影响其他皇后的标记。5. 结果转换conver(vectorvectorchar a, vectorvectorstring b)作用将标记后的棋盘转换为OJ要求的输出格式——过滤攻击范围标记0~n-1仅保留Q皇后和.空。注意参数a采用值传递避免修改原棋盘的状态不影响后续回溯。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

购物网站运营株洲营销网站建设

LobeChat能否用于构建竞品分析系统?商业情报自动化收集 在数字化竞争日益激烈的今天,企业对市场动态的感知速度,往往直接决定了产品迭代的成败。一个典型的场景是:产品经理清晨打开邮箱,发现竞品突然上线了某项关键功能…

张小明 2026/1/6 20:26:20 网站建设

地区电商网站系统wordpress 优惠码

蜂鸣器驱动电压实战解密:从原理到电路设计的完整指南你有没有遇到过这样的情况?一个报警系统明明代码跑得没问题,但蜂鸣器就是“有气无力”;或者电池刚换上时响得震天,用了一周却彻底哑火。更离谱的是,MCU莫…

张小明 2026/1/9 13:25:48 网站建设

建设纺织原料网站电商网站取名

CUDA安装补丁更新指南|Miniconda-Python3.10保持最新驱动 在深度学习项目中,最让人头疼的往往不是模型调参,而是环境跑不起来——明明代码没问题,却因为“CUDA not available”或“libcudart.so not found”卡住整个训练流程。这类…

张小明 2026/1/9 18:17:11 网站建设

小说网站搭建教程i国网app免费下载

预训练(Pretraining)与有监督微调(Supervised Fine-Tuning, SFT)是大语言模型开发的两个关键阶段,其评估目标、方法和指标存在显著差异。预训练的评估 预训练的目标是让模型学习通用的语言表示能力,因此评估…

张小明 2026/1/9 18:17:11 网站建设

asp文件怎么做网站网站名重复

GPT-SoVITS音频输入格式与采样率规范深度解析 在个性化语音合成技术迅速普及的今天,越来越多开发者和内容创作者开始尝试用仅几分钟的语音样本克隆出高度还原的音色。GPT-SoVITS 作为当前少样本语音克隆领域最具代表性的开源项目之一,凭借其“一分钟即可…

张小明 2026/1/9 8:09:54 网站建设

查看网站是否做百度推广深圳知名装修设计公司

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个智能助手应用,能够自动搜索可靠的VS2019离线安装包下载源,验证文件完整性和安全性,并提供一键下载功能。应用需包含以下功能&#xff1…

张小明 2026/1/6 20:23:39 网站建设