hdu2553 N皇后問題--DFS
一:原題內容
Problem Description 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的N,求出有多少種合法的放置方法。
Input 共有若干行,每行一個正整數N≤10,表示棋盤和皇后的數量;如果N=0,表示結束。 Output 共有若干行,每行一個正整數,表示對應輸入行的皇后的不同放置數量。 Sample Input 1 8 5 0 Sample Output 1 92 10
二:AC程式碼
#define _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 #include <iostream> using namespace std; int a[11][11];//皇后棋盤,第一行第一列捨棄,其中第一列用來儲存每一行皇后的列座標 int b[11];//打表所用的陣列 int N; int num; void DFS(int n, int & m); int main() { //////1.打表 for (int i = 1; i < 11; i++) { num = 0; DFS(1,i); b[i] = num; } //////2. while (cin >> N&&N != 0) { cout << b[N] << endl; } return 0; } bool isLegal(int & x, int & y)//判斷棋盤上座標為x,y是否可以放置皇后 { for (int i = 1; i < x; i++) { if (a[i][0] == y || abs(i - x) == abs(a[i][0] - y)) return false; } return true; } void DFS(int n,int & m)//n代表搜尋到第n行,m代表是m皇后 { if (n == m+1) num++; else { for (int i = 1; i <= m; i++) { if (isLegal(n, i)) { a[n][0] = i; //a[n][i]=1; DFS(n + 1, m); } //a[n][i] = 0; } } }
相關推薦
hdu2553 N皇后問題--DFS
一:原題內容 Problem Description 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
hdu2553 n皇后問題 dfs搜尋 記憶化
N皇后問題 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21710 Accepted Submis
hdu2553 N皇后問題(回溯dfs)
剛開始怎麼也想不通怎麼斜向判斷,看了詳解,服了。。戳這裡N皇后詳解 準確的說他是用了滾動陣列,分別用三行記錄正對角線,縱向,反對角線方向所放置過皇后所能影響的狀態記錄。若在攻擊範圍內,則標記1。而且
HDU2553 N皇后問題【回溯法】
N皇后問題 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S
HDU2553 N皇后問題(回溯法)
此題是經典的N皇后問題,描述:在一個N*N的棋盤上要擺放N個皇后,要求任意兩個皇后不能在同一行,同一列或者同一條與棋盤的邊成45度角的斜線上,即與對角線平行的斜線上,求對於不同的N,各有多少種擺法使任意兩個皇后不能相互攻擊。 用回溯法就可以解決,設皇后的編號依次為1,2,
hdu2553 n皇后問題(純粹回溯法)
#include <iostream> #include <string> #include <stdio.h> #include <algorithm> #include <math.h> //n皇后問題用一維陣列
n皇后問題(dfs練習)hdu2553
題目: Problem Description 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 你的任務是,對於給定的N,求出有多少種合法的放置方法。 Input 共有若干行,每行一個正整數N≤10,
HDU2553:N皇后問題(DFS)
Problem Description 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 你的任務是,對於給定的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; i
經典DFS之N皇后問題
N皇后問題 題目 Time Limit:1000MS Memory Limit:32768KB Description 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋
搜尋&回溯——N皇后(hdu2553)
題目連結: 題目描述: 在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 你的任務是,對於給定的N,求出有多少種合法的放置方法。 解決思路: 回溯官方課題~用這道題理解回溯再合適不過了
【DFS】N皇后問題
侵刪。 #include <stdio.h> #include <string.h> int map[20][20],cnt; int ans[20] = {0},num,n; void dfs(int x,int y)
hdu2553八皇后問題(DFS)
在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。 你的任務是,對於給定的N,求出有多少種合法的放置方法。 Input共有若干行,每行一個正整數N≤10,表示棋盤和皇后的數量;如果N
hdu2553(詳解)N皇后問題
N皇后問題 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21697 Accepted Submi
dfs n皇后問題
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<algorithm> #include<iostream> #includ
N皇后問題(hdu2553)
N皇后問題 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7656 Accepted Submissio
DFS解決n皇后問題
問題描述 在nxn格的棋盤上放置彼此不受攻擊的n個皇后。按照國際象棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n皇后問題等價於在nxn格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一類或同一斜線上。 演算法設計 用n元組x[1:n]表示n皇后問題的
【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