1. 程式人生 > >N皇后問題 HDU

N皇后問題 HDU

深搜+打表。
1.全域性變數打表
2.出口判斷
3.用check[i]=j代表第i行放置的是第j個棋子

#include<cstdio>
using namespace std;
int check[11]={0},s[11]={0};//下標是行數,值是第幾個棋子,s儲存答案
int ct=0,n=1;//n全域性變數,用來打表
int dfs(int cur)
{
    if(cur>n)
    {
        ct++;
        return 0;
    }
    else
    {
        for(int i=1;i<=n;i++)
        {
            int ok=1;
            check[cur]=i;
            for(int j=1;j<cur;j++)
            {
                if(check[j]==check[cur]||cur-j==check[cur]-check[j]||cur+check[cur]==j+check[j])
                {
                    ok=0;
                    break;
                }
            }
            if(ok)
                dfs(cur+1);
        }
    }
}




int main(void)
{
    for(n=1;n<11;n++)
    {
        ct=0;
        dfs(1);
        s[n]=ct;
    }
    int k;
    while(scanf("%d",&k)==1&&k!=0)
    {
        printf("%d\n",s[k]);
    }
    return 0;
}

相關推薦

HDU-2553 N皇后問題

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

N皇后問題 HDU

深搜+打表。 1.全域性變數打表 2.出口判斷 3.用check[i]=j代表第i行放置的是第j個棋子 #include<cstdio> using namespace std; int check[11]={0},s[11]={0};//下標是行數

HDU 2553 N皇后問題(遞迴深搜)

N皇后問題 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S

【dfs+回溯】hdu 2553 N皇后問題

Source :hdu 2553 N皇后問題 Problem Description 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也

[Swift]LeetCode51. N皇后 | N-Queens

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

[Swift]LeetCode52. N皇后 II | N-Queens II

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

演算法筆記_全排列與N皇后問題

說明:這裡的全排列是按字典序的. 以下給出從1到3的全排列程式碼: #include<iostream> #include<stdlib.h> using namespace std; const int maxn = 11; //P為當前排列,hashTable記錄

回溯之N皇后問題

回溯演算法思想:為了求得問題的解,先選擇某一種可能情況進行試探,在試探過程中,一旦發現原來的選擇的假設情況是錯誤的,就退回一部重新選擇,繼續向前試探,如此反覆進行,直至得到解或證明無解。 如何能夠在N X N的國際象棋棋盤上放置N個皇后,使得任何一個皇后都無法直接吃掉其他的皇后? 為了達到此

N皇后問題(搜尋C語言版)

用陣列int x[N]表示棋盤狀態,例如x[0]=1表示第0行皇后放在第1列。 皇后k在第k行第x[k]列:(k,x[k]) 測試方法:測試皇后k在第k行第x[k]列時,是否與前面已放置好的皇后j相攻擊。 x[j]== x[k] 時,兩皇后在同一列上; abs(k-j)==abs(x[j]-

資料結構實驗題:用棧求解n皇后問題

和用棧求解迷宮問題思路相似,特此記錄下。 程式碼: #include <iostream> #include <stdlib.h> #include <cmath> #include <algorithm> using namespace

LeetCode 51. N皇后 N Queens

8-8 回溯法是經典人工智慧的基礎 N Queens 題目: LeetCode 51. N皇后 n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。 上圖為 8 皇后問題的一種解法。 給定一個整數 n,返回所有不同的 n

52.N皇后II(N-Queens II)

題目描述 n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。 給定一個整數 n,返回 n 皇后不同的解決方案的數量。 解題思路 嗯,這題就是上一題(51.N皇后)的翻版,上一題要求輸出所有解法,這一題卻只要求數量就行了。 所以。

51.N皇后N-Queens)

題目描述 n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。 給定一個整數 n,返回所有不同的 n 皇后問題的解決方案。 每一種解法包含一個明確的 n 皇后問題的棋子放置方案,該方案中 ‘Q’ 和 ‘.’ 分別代表了皇后和空位。 示例:

回溯法解決N皇后問題

八皇后問題 在棋盤上放置8個皇后,使得它們互不攻擊,此時每個皇后的攻擊範圍為同行同列和同對角線,要求找出所有解。 遞迴函式將不再遞迴呼叫它自身,而是返回上一層呼叫,這種現象稱為回溯(backtracking)。 當把問題分成若干步驟並遞迴求解時,如果當前步驟沒有合法選擇,則函式將返回

N皇后遞迴

問題: n皇后問題:輸入整數n, 要求n個國際象棋的皇后,擺在 n*n的棋盤上,互相不能攻擊,輸出全部方案。 #include <iostream> using namespace std; int N; int queuePos[100];//用來描述每一個皇后所擺的列數 vo

N皇后II

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。 上圖為 8 皇后問題的一種解法。 給定一個整數 n,返回 n 皇后不同的解決方案的數量。 感覺N皇后II是皇后I的簡單版啊,哈哈。 bool isok(int r

遞迴——以全排列和n皇后問題舉例

筆記來自【晴神寶典】 一、遞迴 遞迴 就在於反覆呼叫自身函式,但是每次都把問題範圍縮小,直到範圍可以縮小到可以直接得到邊界資料的結果,然後在返回路上求出對應的解。以上可看出,遞迴很適合用來實現分治思想。 遞迴兩個很重要的組成組成: 1、遞迴邊界(出口); 2、遞迴式

回溯法解決N皇后問題(以四皇后為例)

回溯法解決N皇后問題(以四皇后為例) 其他的N皇后問題以此類推。所謂4皇后問題就是求解如何在4×4的棋盤上無衝突的擺放4個皇后棋子。在國際象棋中,皇后的移動方式為橫豎交叉的,因此在任意一個皇后所在位置的水平、豎直、以及45度斜線上都不能出現皇后的棋子,例子 要求程式設計求出符合要求的情

「JoyOI1080」N皇后

這是菜雞的我第一次寫這類題目: 題意:就是在N*N的棋盤上,每一行,每一列,所有的對角線都只能有一個棋子。 先分析:假若N=4;     則為其中的一種答案。要輸出左右的解,肯定要枚舉出所有的解。那麼非常自然的想到遞迴!   根據題意,每一步棋子都滿足,在一行,一列,兩個對角線。那麼怎麼解決呢?  

洛谷P1562 還是N皇后

題目描述 正如題目所說,這題是著名的N皇后問題。 輸入輸出格式 輸入格式:   第一行有一個N。接下來有N行N列描述一個棋盤,“*”表示可放“.”表示不可放。   輸出格式:   輸出方案總數   輸入輸出樣例