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列描述一個棋盤,“*”表示可放“.”表示不可放。 輸出格式: 輸出方案總數 輸入輸出樣例