1. 程式人生 > >【回溯】51. N-Queens

【回溯】51. N-Queens

在52. N-Queens II的基礎上微改程式碼即可,新增棋盤的輸出:

class Solution {
public:
    vector<vector<string>> solveNQueens(int n) {
        vector<int> temp;
        vector<vector<string>> res;
        vector<string> nullpoint;
        init(nullpoint,n);
        find(res,temp,0,n,nullpoint);
        return res;
    }
     void init(vector<string>& nullpoint,int total)  //初始化一個空的棋盤格,各位置均為字元'.'
     {
         string s;
         for(int i = 0;i<total;i++)
             s= s+'.';
         for(int i=0;i<total;i++)
             nullpoint.push_back(s);
     }
     bool check(vector<int>& temp, int row, int col)
    {
        for (int i = 0; i < temp.size(); i++)
        {
            if (row == i || col == temp[i] || abs((row - i)) == abs((col - temp[i])))
                return 0;
        }  
        return 1;
    }
    void find(vector<vector<string>>& res, vector<int>& temp, int row, int total,vector<string> nullpoint)
    {
        if (row == total)
        {
            for(int i=0;i<temp.size();i++)
                nullpoint[i][temp[i]]='Q';    //得到一解後,將nullpoint中的(i,temp[i])位置替換為'Q'
            res.push_back(nullpoint);            
            return;
        }
        int i = row;
        for (int j = 0; j < total; j++)
        {
            if (check(temp,i,j))
            {
                temp.push_back(j);
                find(res, temp, i + 1, total,nullpoint); 
                temp.pop_back();
            }
        }
    }
    
};

相關推薦

回溯51. N-Queens

在52. N-Queens II的基礎上微改程式碼即可,新增棋盤的輸出:class Solution { public: vector<vector<string>> solveNQueens(int n) { vector&l

LeetCode51. N-Queens 解題報告(C++)

作者: 負雪明燭 id: fuxuemingzhu 個人部落格: http://fuxuemingzhu.cn/ 目錄 題目描述 題目大意 解題方法 回溯法 日期 題

LeetCode104.N-Queens II

題目描述(Hard) The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each

LeetCode103.N-Queens

題目描述(Hard) The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each

leetcode51. (Hard) N-Queens

題目連結 解題思路: 回溯 res用於存放所有的結果 positions用於記錄當前已經擺放好的有效的皇后的位置 columns是一個一維陣列,長度為n。用於記錄第一排、第二排、第三排…的皇后的位置(所在的列)。 主體函式是solveNQueens. newDistrub

BZOJ1130 N的階乘的長度 V2(斯特林近似)

n) ges src algo span ace pan nbsp closed 【算法】數學 【題解】斯特林公式: #include<cstdio> #include<algorithm> #include<cmath> usin

leetCode 51.N-Queens (n皇後問題) 解題思路和方法

dex 數據 我想 attack upload sar alt row queen N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such t

51. N-Queens

and ret ger class color onf int pre indicate The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw

XSY1295calc n個點n條邊無向連通圖計數 prufer序列

ring pre end ctime 節點 splay 按順序 sin algorithm 題目大意   求\(n\)個點\(n\)條邊的無向連通圖的個數   \(n\leq 5000\) 題解   顯然是一個環上有很多外向樹。   首先有一個東西:\(n\)個點選\(k\

leetcode589. N-ary Tree Preorder Traversal

pan 題目 info children class for pre 技術分享 分享圖片 題目如下: 解題思路:湊數題+1,話說我這個也是湊數博? 代碼如下: class Solution(object): def preorder(self, root):

leetcode590. N-ary Tree Postorder Traversal

inf clas traversal val obj 解題思路 tor sel spa 題目如下: 解題思路:湊數題+2,做完先序做後序。湊數博+2。 代碼如下: class Solution(object): def postorder(self, root)

JAVA30051-55 筆記

51_面向物件_24_內部類詳解.avi 類能在方法裡面定義 內部類不是很好理解,但說白了其實也就是一個類中還包含著另外一個類 如同一個人是由大腦、肢體、器官等身體結果組成,而內部類相當於其中的某個器官之一,例如心臟:它也有自己的屬

[leetcode] 51. N-Queens (遞迴)

遞迴,經典的八皇后問題。 利用一位陣列儲存棋盤狀態,索引表示行,值為-1表示空,否則表示列數。 對行進行搜尋,對每一行的不同列數進行判斷,如果可以擺放符合規則,則擺放,同時遍歷下一行。 遍歷過程中,若已經遍歷了n行,則儲存該狀態。 Runtime: 4 ms, faster than 91.

Java隨機n個list的值

Map map = new HashMap(); List listNew = new ArrayList(); if (list.size() <= n) { return gson.toJson(list); } else { while (map.size() < n)

LeetCode 51.N-Queens (N皇后問題)

題目描述: n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。 上圖為 8 皇后問題的一種解法。 給定一個整數 n,返回所有不同的 n 皇后問題的解決方案。 每一種解法包含一個明確的 n 皇后問題的棋子放置方案,該方案

LeetCode-51.N-Queens

0.原題 The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an i

LeetCode589. N叉樹的前序遍歷、590. N叉樹的後序遍歷

題目描述 給定一個 N 叉樹,返回其節點值的 前序遍歷 和 後續遍歷 。 例如,給定一個 3叉樹 : 返回其前序遍歷: [1,3,5,6,2,4]; 返回其後序遍歷: [5,6,3,2,4,1]。 思路 遞迴法非常簡單,root 為空時直接為空,否則迴圈呼

LeetCode559. N叉樹的最大深度

題目描述 給定一個 N 叉樹,找到其最大深度。 最大深度是指從根節點到最遠葉子節點的最長路徑上的節點總數。 例如,給定一個 3叉樹 : 我們應返回其最大深度,3。 說明: 樹的深度不會超過 100

演算法n個有序集合合併成一個新的有序集合

import java.util.*;public class Main {public static void main(String[] args) {List<List<Integer>> lists = new ArrayList<>

LeetCode961. N-Repeated Element in Size 2N Array 解題報告(Python & C+++)

作者: 負雪明燭 id: fuxuemingzhu 個人部落格: http://fuxuemingzhu.cn/ 目錄 題目描述 題目大意 解題方法 字典 日期 題目