国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【力扣 51】N 皇后(回溯+剪枝+深度優(yōu)先搜索)

這篇具有很好參考價值的文章主要介紹了【力扣 51】N 皇后(回溯+剪枝+深度優(yōu)先搜索)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

按照國際象棋的規(guī)則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。

n 皇后問題 研究的是如何將 n 個皇后放置在 n×n 的棋盤上,并且使皇后彼此之間不能相互攻擊。

給你一個整數(shù) n ,返回所有不同的 n 皇后問題 的解決方案。

每一種解法包含一個不同的 n 皇后問題 的棋子放置方案,該方案中 ‘Q’ 和 ‘.’ 分別代表了皇后和空位。

示例 1:

輸入:n = 4
輸出:[[“.Q…”,“…Q”,“Q…”,“…Q.”],[“…Q.”,“Q…”,“…Q”,“.Q…”]]
解釋:如上圖所示,4 皇后問題存在兩個不同的解法。
示例 2:

輸入:n = 1
輸出:[[“Q”]]

提示:

1 <= n <= 9


思路

N皇后問題是在一個NxN的棋盤上放置N個皇后,使得它們不能互相攻擊,即任何兩個皇后都不能處于同一行、同一列或同一斜線上。

定義一個位集(bitset)來記錄每一列以及兩個對角線上是否已經(jīng)放置了皇后。其中,vis1用于記錄列,vis2vis3用于記錄兩個對角線。

dfs函數(shù)中,首先檢查當(dāng)前搜索的深度是否已經(jīng)達(dá)到了棋盤的大小,如果達(dá)到了,說明已經(jīng)找到了一種放置皇后的方式,將其添加到結(jié)果集中。然后,遍歷當(dāng)前行的每一列,檢查放置皇后是否合法,即檢查當(dāng)前位置所在的列以及兩個對角線上是否已經(jīng)有皇后。如果合法,就在當(dāng)前位置放置皇后,并標(biāo)記當(dāng)前位置所在的列和兩個對角線,然后搜索下一行。搜索完后,需要進(jìn)行回溯,即恢復(fù)當(dāng)前位置的狀態(tài),以便進(jìn)行下一次搜索。


AC代碼

/*
 * @lc app=leetcode.cn id=51 lang=cpp
 *
 * [51] N 皇后
 */

// @lc code=start
class Solution {
	static const int N = 15;
	vector<vector<string>> ans;
	vector<string> tmp;
	bitset<N> vis1, vis2, vis3;

	void dfs(int i, int n) {
		// 遞歸出口
		if (i == n) {
			ans.push_back(tmp);
			return;
		}
		for (int j = 0; j < n; j++) {
			// 剪枝
			if (vis1[j] || vis2[i + j] || vis3[n + i - j]) {
				continue;
			}
			// 修改現(xiàn)場
			vis1[j] = 1;
			vis2[i + j] = 1;
			vis3[n + i - j] = 1;
			tmp[i][j] = 'Q';
			dfs(i + 1, n);
			// 恢復(fù)現(xiàn)場
			vis1[j] = 0;
			vis2[i + j] = 0;
			vis3[n + i - j] = 0;
			tmp[i][j] = '.';
		}
	}

   public:
	vector<vector<string>> solveNQueens(int n) {
		// 初始化
		vis1.reset();
		vis2.reset();
		vis3.reset();
		tmp.resize(n);
		for (auto &i : tmp) {
			i.resize(n, '.');
		}
		dfs(0, n);
		return ans;
	}
};
// @lc code=end


【力扣 51】N 皇后(回溯+剪枝+深度優(yōu)先搜索),Algorithm Problems,leetcode,剪枝,深度優(yōu)先文章來源地址http://www.zghlxwxcb.cn/news/detail-836148.html

到了這里,關(guān)于【力扣 51】N 皇后(回溯+剪枝+深度優(yōu)先搜索)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【算法】回溯:與遞歸,dfs的同質(zhì)與分別,剪枝與恢復(fù)現(xiàn)場的詳細(xì)理解,n皇后的回溯解法及算法復(fù)雜度分析。

    【算法】回溯:與遞歸,dfs的同質(zhì)與分別,剪枝與恢復(fù)現(xiàn)場的詳細(xì)理解,n皇后的回溯解法及算法復(fù)雜度分析。

    目錄 ?編輯 1.什么是回溯 2.關(guān)于剪枝 3.關(guān)于恢復(fù)現(xiàn)場 4.題目:二叉樹的所有路徑(凸顯恢復(fù)現(xiàn)場:切實(shí)感受回溯與深搜) 問題分析 ①函數(shù)設(shè)置為:void Dfs(root) ②函數(shù)設(shè)置為:void Dfs(root,path) 解題思想:使?深度優(yōu)先遍歷(DFS)求解。 代碼實(shí)現(xiàn) 5.N后問題 問題分析 4皇后的放置

    2024年04月16日
    瀏覽(20)
  • 【力扣】77. 組合 <回溯、回溯剪枝>

    【力扣】77. 組合 <回溯、回溯剪枝>

    給定兩個整數(shù) n 和 k,返回范圍 [1, n] 中所有可能的 k 個數(shù)的組合。你可以按任何順序返回答案。 示例 1: 輸入:n = 4, k = 2 輸出: 示例 2: 輸入:n = 1, k = 1 輸出: 提示: 1 = n = 20 1 = k = n 暴力思考:k 等于多少就是多少層循環(huán)。 回溯 回溯法解決的問題都可以抽象為樹形結(jié)構(gòu)

    2024年02月12日
    瀏覽(25)
  • 【力扣】216. 組合總和 III <回溯、回溯剪枝>

    【力扣】216. 組合總和 III <回溯、回溯剪枝>

    找出所有相加之和為 n 的 k 個數(shù)的組合,且滿足下列條件: 只使用數(shù)字 1 到 9,每個數(shù)字最多使用一次,返回所有可能的有效組合的列表 。該列表不能包含相同的組合兩次,組合可以以任何順序返回。 示例 1: 輸入: k = 3, n = 7 輸出: [[1,2,4]] 解釋: 1 + 2 + 4 = 7 沒有其他符合的組合

    2024年02月10日
    瀏覽(18)
  • C#八皇后算法:回溯法 vs 列優(yōu)先法 vs 行優(yōu)先法 vs 對角線優(yōu)先法

    目錄 1.八皇后算法(Eight Queens Puzzle) 2.常見的八皇后算法解決方案 (1)列優(yōu)先法(Column-First Method): (2)行優(yōu)先法(Row-First Method): (3)對角線優(yōu)先法(Diagonal-First Method): (4)回溯法(Backtracking): ???????皇后問題是一個古老而著名的問題,它實(shí)質(zhì)上就是使棋

    2024年03月22日
    瀏覽(15)
  • 組合(力扣)dfs + 回溯 + 剪枝 JAVA

    組合(力扣)dfs + 回溯 + 剪枝 JAVA

    給定兩個整數(shù) n 和 k,返回范圍 [1, n] 中所有可能的 k 個數(shù)的組合。 你可以按 任何順序 返回答案。 示例 1: 輸入:n = 4, k = 2 輸出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 輸入:n = 1, k = 1 輸出:[[1]] 提示: 1 = n = 20 1 = k = n 解題思路: 1.每個元素有選與不選兩種情況,

    2024年02月16日
    瀏覽(17)
  • DFS(基礎(chǔ),回溯,剪枝,記憶化)搜索

    DFS(基礎(chǔ),回溯,剪枝,記憶化)搜索

    DFS(深度優(yōu)先搜索) 基于遞歸求解問題,而針對搜索的過程 對于問題的介入狀態(tài)叫初始狀態(tài),要求的狀態(tài)叫目標(biāo)狀態(tài) 這里的搜索就是對實(shí)時產(chǎn)生的狀態(tài)進(jìn)行分析檢測,直到得到一個目標(biāo)狀態(tài)或符合要求的最佳狀態(tài)為止。對于實(shí)時產(chǎn)生新的狀態(tài)的過程叫擴(kuò)展 搜索的要點(diǎn): 1.選定初

    2024年04月12日
    瀏覽(16)
  • DFS:深搜+回溯+剪枝解決矩陣搜索問題

    DFS:深搜+回溯+剪枝解決矩陣搜索問題

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)作不易,感謝三連??!? . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) 1、矩陣搜索問題經(jīng)常要用到向量,也就是我們可以通過dx和dy來幫助我們定義方向

    2024年04月17日
    瀏覽(20)
  • Day31 46全排列 47全排列II 回溯去重tips 51N皇后 37解數(shù)獨(dú)

    Day31 46全排列 47全排列II 回溯去重tips 51N皇后 37解數(shù)獨(dú)

    給定一個 沒有重復(fù) 數(shù)字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] ?排列問題與組合問題的不同之處就在于,沒有startIndex,同時需要設(shè)置一個used數(shù)組,遍歷過的就設(shè)置成true,下次遇到時跳過。 給定一個可包含重

    2024年01月20日
    瀏覽(22)
  • DFS(深度優(yōu)先遍歷、N皇后問題、2N皇后問題)

    DFS(深度優(yōu)先遍歷、N皇后問題、2N皇后問題)

    目錄 一、回溯法與深度優(yōu)先搜索(DFS) 二、DFS與二叉樹的前序遍歷 2.1、二叉樹的前序遍歷 2.2、DFS 全排列 ?2.3、分析 三、N皇后問題 1. 回溯法: 是一種通過探索所有可能的候選解來找出所有解的算法。如果候選解被確認(rèn)不是一個解的話(或者至少不是最后一個解),回溯法

    2024年03月21日
    瀏覽(25)
  • 每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路)

    每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路)

    目錄 力扣39. 組合總和 解析代碼1 解析代碼2 39. 組合總和 LCR 081. 組合總和 難度 中等 給你一個? 無重復(fù)元素 ?的整數(shù)數(shù)組? candidates ?和一個目標(biāo)整數(shù)? target ?,找出? candidates ?中可以使數(shù)字和為目標(biāo)數(shù)? target ?的 所有 ? 不同組合 ?,并以列表形式返回。你可以按? 任意順序

    2024年04月28日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包