1. 程式人生 > >N皇后問題(DFS)N皇后問題

N皇后問題(DFS)N皇后問題

<span style="font-size:14px;"><span style="font-size:14px;">#include<cstdio>
#include<cstdlib>
using namespace std;
int n,m,temp;
int map[15],ans[15];
void DFS(int ceng)  //傳入的引數是層數
{
    int lie,k,flag;//列數lie
    if(ceng == n+1)
    {
        temp++;
        return ;
    }
    for(lie = 1; lie <= n; lie++)
    {
        map[ceng] = lie;    //第ceng層的皇后放在第lie列
        flag = 1;
        for(k = 1; k < ceng; k++)
        {
            if( (map[k] == lie) || (abs(ceng-k) == abs(map[k]-lie)) )
            //如果要放置的皇后與已經放置的皇后處於同一列或者在同一斜線,即為不符合的位列
            {
                flag = 0;
                break;
            }
        }
        if(flag) DFS(ceng+1);//該層可以存放,則進入下一層
    }
}
int main(void)
{
    for(n = 1; n <= 10; n++)
    {
        temp = 0;   //臨時存放結果
        DFS(1);     //從第一層開始
        ans[n] = temp;
    }
    while(scanf("%d",&m) && m)
        printf("%d\n",ans[m]);

    return 0;
}</span></span>


相關推薦

N皇后問題DFSN皇后問題

<span style="font-size:14px;"><span style="font-size:14px;">#include<cstdio> #include<cstdlib> using namespace std; int n,m,temp; i

搜尋&回溯——N皇后hdu2553

題目連結: 題目描述: 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 你的任務是,對於給定的N,求出有多少種合法的放置方法。 解決思路: 回溯官方課題~用這道題理解回溯再合適不過了

1- nn個數的全排列dfs

這個模板呢可以應用於許多地方,例如:一串字元的全排列;或者給你一段字元或者數字,然後讓你找到一組或者多組滿足特定要求的 排列;給你一組數, 然後讓你求相鄰兩個數有特定關係的排列:等等許多類似的問題都可以通過下面這個求解n個數的全排列程式碼 來改變,可以都過新增以

求出對應N的所有合法匹配括號 DFS---小米筆試題

給定N對括號,輸出其所有的合法的組合狀態,例如,N=3,所有的合法狀態為:"((()))”, “(()())”, “(())()”, “()(())”, “()()()”; 解析: 還是深搜DFS的

hdu2553八皇后問題DFS

在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 你的任務是,對於給定的N,求出有多少種合法的放置方法。 Input共有若干行,每行一個正整數N≤10,表示棋盤和皇后的數量;如果N

9.9遞歸和動態規劃——N皇後

其它 ace req case create lac any urn distance /** * 功能:打印八皇後在8*8棋盤上的各種擺法。當中每一個皇後都不同行、不同列,也不在對角線上。 * 這裏的“對角線”指的是全部的對角線,不僅僅是平分整個棋盤的那兩

Leetcode解題筆記之51-- N-Queens [Hard]

解題思路 N皇后問題就是是NP完全類問題的一個典型例項,它沒有多項式時間演算法解。 在設計演算法求解的時候,我們應該儘量考慮減少搜尋次數和判斷次數,儘量減少迴圈和遞迴的次數,從而降低求解耗時。 注意:將棋盤上不能放的點去除。因為是按照每行每行去放皇后,所以只需要判斷西北方和東北方以及上方

領釦LeetCodeN叉樹的層序遍歷 個人題解

給定一個 N 叉樹,返回其節點值的層序遍歷。 (即從左到右,逐層遍歷)。 例如,給定一個 3叉樹 :     返回其層序遍歷: [ [1], [3,2,4], [5,6] ]   說明: 樹的深度不會超

Newcoder 70 F.m皇后水~

Description 在一個n×nn\times nn×n的國際象棋棋盤上有mmm個皇后。 一個皇后可以攻擊其他八個方向的皇后(上、下、左、右、左上、右上、左下、右下)。 對於某個皇后,如果某一個方向上有其他皇后,那麼這個方向對她就是不安全的。 對於每個皇后,

hadoop——hive視訊觀看熱度,Top N案例youtube

資料準備 user.txt 0.txt 欄位以及欄位名解析   user表 欄位 備註 欄位型別 uploader 上傳者使用者名稱 string videos 上傳視訊數 int friends 朋友數量 int   視訊表

《強化學習Sutton》讀書筆記——n步Bootstrappingn-step Bootstrapping

此為《強化學習》第七章 n-step Bootstrapping 。 n n n步Bootstrapping是MC和TD(0)的綜合。隨著對引數 n

資料結構程式設計回顧皇后問題遞迴

設計要求:八皇后問題是在8×8 的國際象棋棋盤上安放8 個皇后,要求沒有一個皇后能夠“吃掉”任何其他一個皇后, 即沒有兩個或多個皇后佔據棋盤上的同一行、同一列或者同 一條對角線。 說明:在實際問題中,有相當一類問題需要找出它的解集合, 或者要找出某些約束條件下的最優解。求解時通常使用一種 稱為回溯的

回溯法解決八皇后c++

八皇后問題是一個以國際象棋為背景的問題:如何能夠在 8×8 的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變為n1×n1,而皇后個數也變成n2。而且僅當

c語言指標篇——陣列指標和指向二維陣列的指標變數*p[N]

陣列指標 首先,我們先介紹一下二維陣列和二維陣列的指標,二維陣列相當於一個特殊的一維數組裡面每個元素又是一個一維陣列,例如:int a [ 3 ] [3],可以看成一個3行的一個列陣列,每一列的元素又是一個長度為3的陣列,陣列名的一個特殊一維陣列的首地址,如

斐波那契數列第NC++

求斐波那契數的第N項,N可以很大但結果不能超過1000位; #include <iostream> #include <memory.h> #include <strin

高精度大數n次方

Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the

和solr的NN--solr的安裝、配置、新增core、後臺功能介紹

一、使用背景 幾乎在每個專案中都會頻繁使用搜索功能,並且資料量很大,如果仍然採用out of date的SQL語句查詢資料庫的方式,個人覺得不僅會增加伺服器的負擔,也會覺得這種方式略顯土氣,跟不上IT

C的一些簡單習題10--n階勒讓德多項式

//n階勒讓德多項式#include <stdio.h>float p(float x,int n){float p_n; if(0==n) {p_n=1;} else if(1==n) {  p_n=x; } else {  p_n=((2*n-1)*x-p(x

線性代數:第一章 行列式1n階行列式 行列式的性質

第一節 n階行列式 一.數學概念 1. 逆序數 對於n個不同的元素,先規定各元素之間有一個標準次序(例如n個不同的自然數,可規定由小到大為標準次序),於是在這n個元素的任一排列中,當某兩個元素的先後次序與標準次序不同時,就說有1個逆序。一個排列中所有逆序的總數叫做這個排列

刷題藍橋杯java---2N皇后

/*問題描述   給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。 輸入格式