1295 N皇后问题
生活随笔
收集整理的這篇文章主要介紹了
1295 N皇后问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1295 N皇后問題
?
時間限制: 2 s 空間限制: 128000 KB 題目等級 : 黃金 Gold 題目描述 Description在n×n格的棋盤上放置彼此不受攻擊的n個皇后。按照國際象棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n后問題等價于再n×n的棋盤上放置n個皇后,任何2個皇后不妨在同一行或同一列或同一斜線上。
輸入描述 Input Description?給定棋盤的大小n (n ≤ 13)
輸出描述 Output Description?輸出整數表示有多少種放置方法。
樣例輸入 Sample Input8
樣例輸出 Sample Output92
#include<cstdio> #include<iostream> #include<cstdlib> #include<iomanip> using namespace std; bool d[100]= {0},b[100]= {0},c[100]= {0}; int sum=0,a[100]; int search(int); int n; int print(); int main() {cin>>n;search(1); cout<<sum; //從第1個皇后開始放置 } int search(int i) {int j;for (j=1; j<=n; j++) //每個皇后都有8位置(列)可以試放if ((!b[j])&&(!c[i+j])&&(!d[i-j+7])) //尋找放置皇后的位置{ //由于C++不能操作負數組,因此考慮加7//放置皇后,建立相應標志值a[i]=j; //擺放皇后b[j]=1; //宣布占領第j列c[i+j]=1; //占領兩個對角線d[i-j+7]=1;if (i==n) print(); //8個皇后都放置好,輸出else search(i+1); //繼續遞歸放置下一個皇后b[j]=0; //遞歸返回即為回溯一步,當前皇后退出c[i+j]=0;d[i-j+7]=0;} } int print() {int i;sum++; //方案數累加1 }?
轉載于:https://www.cnblogs.com/lyqlyq/p/6607587.html
總結
以上是生活随笔為你收集整理的1295 N皇后问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docfetcher
- 下一篇: 第三方库添加记录