leetcode51-N皇后

leetcode 51
在這里插入圖片描述

思路

本題可以使用回溯算法來解決。回溯算法通過嘗試所有可能的解決方案來找到問題的解的算法,當發現當前的選擇無法得到有效的解決方案時,就回溯到上一步,嘗試其他的選擇。對于 N 皇后問題,我們可以逐行放置皇后,在每一行選擇一個合適的列來放置皇后,若當前選擇導致沖突,就回溯到上一行,重新選擇列

初始化棋盤
const dashboard = Array(n).fill().map(() => Array(n).fill('.'));
  • dashboard 是一個 n×n 的二維數組,初始時每個位置都用 . 表示,表示該位置沒有放置皇后
回溯函數
const backtracking = (dashboard, n, row) => {if (row === n) {result.push(dashboard.map(item => item.join('')))return;}for (let i = 0; i < n; i++) {if (isValid(dashboard, row, i, n)) {dashboard[row][i] = 'Q'backtracking(dashboard, n, row + 1)dashboard[row][i] = '.'}}
}
  • 終止條件:當 row 等于 n 時,說明已經成功地在每一行都放置了一個皇后,此時將當前的棋盤布局加入到 result 數組中
  • 遍歷列:對于當前行 row,嘗試在每一列 i 放置皇后
  • 檢查合法性:調用 isValid 函數檢查在 (row, i) 位置放置皇后是否合法
  • 遞歸:如果合法,將皇后放置在 (row, i) 位置,然后遞歸調用 backtracking 函數處理下一行
  • 回溯:遞歸返回后,將 (row, i) 位置的皇后移除,恢復為 .,以便嘗試其他列
棋盤的合法性校驗:關鍵!!!
const isValid = (dashboard, row, col, n) => {if (row === 0) { return true }// 判斷是否在同一列for (let i = 0; i < row; i++) {if (dashboard[i][col] === 'Q') {return false}}// 判斷是否在45度角for (let i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if (dashboard[i][j] === 'Q') {return false}}// 判斷是否是135度角for (let i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {if (dashboard[i][j] === 'Q') {return false}}return true
}
  • 第一行:如果 row 為 0,說明是第一行,任何位置都可以放置皇后,直接返回 true
  • 列檢查:檢查當前列 col 上是否已經有皇后,如果有則返回 false
  • 45 度斜線檢查:從當前位置 (row, col) 向左上方遍歷,如果發現有皇后則返回 false
  • 135 度斜線檢查:從當前位置 (row, col) 向右上方遍歷,如果發現有皇后則返回 false
  • 合法:如果以上檢查都通過,則返回 true,表示該位置可以放置皇后

完整實現

var solveNQueens = function (n) {let result = [];// 初始化棋盤const dashboard = Array(n).fill().map(() => Array(n).fill('.'));const backtracking = (dashboard, n, row) => {if (row === n) {result.push(dashboard.map(item => item.join('')))return;}for (let i = 0; i < n; i++) {if (isValid(dashboard, row, i, n)) {dashboard[row][i] = 'Q'backtracking(dashboard, n, row + 1)dashboard[row][i] = '.'}}}backtracking(dashboard, n, 0)return result;
}const isValid = (dashboard, row, col, n) => {if (row === 0) { return true }// 判斷是否在同一列for (let i = 0; i < row; i++) {if (dashboard[i][col] === 'Q') {return false}}// 判斷是否在45度角for (let i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if (dashboard[i][j] === 'Q') {return false}}// 判斷是否是135度角for (let i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {if (dashboard[i][j] === 'Q') {return false}}return true
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900153.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900153.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux paste 命令

paste 是 Linux 中一個用于水平合并文件內容的命令行工具&#xff0c;它將多個文件的對應行以并行方式拼接&#xff0c;默認用制表符&#xff08;Tab&#xff09;分隔。 1. 基本語法 paste [選項] 文件1 文件2 ... 2. 常用選項 選項說明-d指定拼接后的分隔符&#xff08;默…

Linux 入門:基礎開發工具(上)vim,gcc/g++,make/makefile

目錄 一.軟件包管理器 一&#xff09;.軟件包 二&#xff09;.安裝軟件 三&#xff09;.刪除軟件 二.編輯器vim 一&#xff09;.vim的基本介紹 1.正常/普通/命令模式(Normal mode) 2.插入模式(Insert mode) 3.底行模式(last line mode) 二&#xff09;.vim的基本操作 …

在CPU服務器上部署Ollama和Dify的過程記錄

在本指南中&#xff0c;我將詳細介紹如何在CPU服務器上安裝和配置Ollama模型服務和Dify平臺&#xff0c;以及如何利用Docker實現這些服務的高效部署和遷移。本文分為三大部分&#xff1a;Ollama部署、Dify環境配置和Docker環境管理&#xff0c;適合需要在本地或私有環境中運行A…

請求被中止: 未能創建 SSL/TLS 安全通道。

需要安裝vs2019社區辦&#xff0c;下載VisualStudioSetup.exe后&#xff0c;報無法從"https://aka,ms/vs/16/release/channel"下載通道清單錯誤&#xff0c;接著打開%temp%目錄下的最新日志&#xff0c;發現日志里報&#xff1a; [27d4:000f][2025-04-04T21:15:43] …

第六課:AI繪畫進階模型

文章目錄 Part.01 文本嵌入(Embeddings)Part.02 低秩模型(LoRa)Part.03 超網絡(Hypernetwork)Part.01 文本嵌入(Embeddings) Embeddings(Textual Inversion)Checkpoint如果是字典,Embeddings就是書簽,讓檢索更加高效深度學習中Embeddings叫做嵌入式向量使用方法:下載Embeddi…

閱讀分析Linux0.11 /boot/setup.s

目錄 第一部分第二部分第三部分 該源文件功能分為三部分&#xff1a; &#xff08;1&#xff09;源文件開始部分是通過各種中斷指令&#xff0c; 初始化計算機的組成硬件&#xff0c;獲得硬件的參數&#xff0c;然后保存到段空間0X9000。該空間原來是保存加載到內存的引導扇區內…

TSMaster在新能源汽車研發測試中的硬核應用指南

——從仿真到標定&#xff0c;全面賦能智能汽車開發 引言&#xff1a;新能源汽車測試的挑戰與TSMaster的破局之道 新能源汽車的快速發展對研發測試提出了更高要求&#xff1a;復雜的電控系統、高實時性通信需求、多域融合的驗證場景&#xff0c;以及快速迭代的開發周期。傳統測…

web漏洞靶場學習分享

靶場&#xff1a;pikachu靶場 pikachu漏洞靶場漏洞類型: Burt Force(暴力破解漏洞)XSS(跨站腳本漏洞)CSRF(跨站請求偽造)SQL-Inject(SQL注入漏洞)RCE(遠程命令/代碼執行)Files Inclusion(文件包含漏洞)Unsafe file downloads(不安全的文件下載)Unsafe file uploads(不安全的文…

《Linux內存管理:實驗驅動的深度探索》【附錄】【實驗環境搭建 4】【Qemu 如何模擬numa架構】

我們在學習 linux 內核時&#xff0c;會涉及到很多 numa 的知識&#xff0c;那我們該如何在 qemu 中模擬這種情況&#xff0c;來配合我們的學習呢&#xff1f; 我們該如何模擬 如下的 numa 架構 Qemu 模擬 NUMA 架構 -M virt,gic-version3,virtualizationon,typevirt \ -cp…

YOLOv12 從預訓練邁向自主訓練,第一步數據準備

視頻講解&#xff1a; YOLOv12 從預訓練邁向自主訓練&#xff0c;第一步數據準備 前面復現過yolov12&#xff0c;使用pre-trained的模型進行過測試&#xff0c;今天來講下如何訓練自己的模型&#xff0c;第一步先準備數據和訓練格式 https://gitcode.com/open-source-toolkit/…

Keil 5 找不到編譯器 Missing:Compiler Version 5 的解決方法

用到自記&#xff1a; 下載地址&#xff1a; Keil5 MDK541.zip ?編輯https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 問題描述 沒有找到 compiler version5 &#xff1a; 1. 下載 Arm Compiler 5 也可以直接點擊下載文章開頭的文件。 2. 安裝 直接安裝在KEI…

結腸鏡3D視頻數據集-C3VD論文中文版

文章目錄 標題作者摘要一、介紹1.1. 相關工作1.1.1. 內鏡重建數據集1.1.2. 注冊真實和虛擬內窺鏡圖像1.1.3. 2D-3D注冊1.2. 貢獻 二、方法2.1. 幻影模型生產2.2. 數據采集2.3. 注冊流程概述2.3.1. 數據預處理2.3.2. 目標深度估計2.3.3. 渲染深度幀2.3.4. 邊緣損失和優化 2.4. 模…

hadoop 集群的常用命令

# 查看HDFS目錄內容 hadoop fs -ls /path # 創建目錄 hadoop fs -mkdir /path/to/dir # 上傳本地文件到HDFS hadoop fs -put localfile /hdfs/path # 下載HDFS文件到本地 hadoop fs -get /hdfs/path localfile # 查看文件內容 hadoop fs -cat /hdfs/path/file # 刪除文件/…

MaxEnt物種分布建模全流程;R+ArcGIS+MaxEnt模型物種分布模擬、參數優化方法、結果分析制圖與論文寫作

融合R語言的MaxEnt模型具有以下具體優勢&#xff1a; 數據處理高效便捷 &#x1f4ca;強大的數據預處理功能&#xff1a;R語言提供了豐富的數據處理工具&#xff0c;能夠輕松完成數據清洗、篩選、轉換等操作&#xff0c;為MaxEnt模型提供高質量的輸入數據。 &#x1f310;自動…

Java基礎 4.4

1.方法快速入門 public class Method01 {//編寫一個main方法public static void main(String[] args) {//方法使用//1.方法寫好后&#xff0c;如果不去調用(使用)&#xff0c;不會輸出Person p1 new Person();p1.speak();//調用方法 p1.cal01();//調用計算方法1p1.cal02(10);…

Tiktok矩陣運營中使用云手機的好處

Tiktok矩陣運營中使用云手機的好處 云手機在TikTok矩陣運營中能夠大幅提高管理效率、降低封號風險&#xff0c;并節省成本&#xff0c;是非常實用的運營工具。TikTok矩陣運營使用云手機有很多優勢&#xff0c;特別是對于需要批量管理賬號、提高運營效率的團隊來說。以下是幾個…

指針函數、函數指針和指針函數指針的全面總結

C中指針函數、函數指針和指針函數指針的全面總結 一、核心概念區別 概念本質聲明示例核心特征指針函數返回指針的函數int* func(int);函數定義&#xff0c;返回值是指針類型函數指針指向函數的指針int (*ptr)(int);變量&#xff0c;存儲函數地址指針函數指針指向指針函數的指…

CherryStudio MCP實戰(一)filesystem篇

隨著DeepSeek的爆火&#xff0c;各行各業都在圍繞著大模型尋找新質量生產力。簡單來說&#xff0c;DeepSeek像是人的大腦&#xff0c;他可以推理&#xff0c;幫你思考一些問題&#xff0c;但是具體要做一些事情的時候&#xff0c;他還需要“手腳”來協同。MCP&#xff08;Model…

TCP基礎篇(一)

文章目錄 1.TCP 是如何保證可靠性的?2. 滑動窗口機制3 超時重傳4.TCP 報文格式5. 什么是 TCP 協議5.1 如何唯一確定一個 TCP 連接 6.TCP 三次握手過程6.1 可以兩次握手嗎? 7.TCP 的四次揮手7.1 為什么客戶端要等待2MSL&#xff1f; 8.linux 中查看 TCP 的連接9.TCP 為什么要有…

【Axure元件分享】時間范圍選擇器

時間范圍選擇器下拉選擇開始時間和結束時間&#xff0c;實現效果如下。 源文件截圖&#xff1a; 元件獲取方式&#xff1a;