八皇后問題

2021-10-11 22:44:22 字數 1082 閱讀 6196

題目描述

乙個如下的 6 \times 66×6 的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行、每列有且只有乙個,每條對角線(包括兩條主對角線的所有平行線)上至多有乙個棋子。

上面的布局可以用序列 2\ 4\ 6\ 1\ 3\ 52 4 6 1 3 5 來描述,第 ii 個數字表示在第 ii 行的相應位置有乙個棋子,如下:

行號 1\ 2\ 3\ 4\ 5\ 61 2 3 4 5 6

列號 2\ 4\ 6\ 1\ 3\ 52 4 6 1 3 5

這只是棋子放置的乙個解。請編乙個程式找出所有棋子放置的解。

並把它們以上面的序列方法輸出,解按字典順序排列。

請輸出前 33 個解。最後一行是解的總個數。

輸入格式

一行乙個正整數 nn,表示棋盤是 n \times nn×n 大小的。

輸出格式

前三行為前三個解,每個解的兩個數字之間用乙個空格隔開。第四行只有乙個數字,表示解的總數。

輸入輸出樣例

輸入 #1複製

6輸出 #1複製

2 4 6 1 3 5

3 6 2 5 1 4

4 1 5 2 6 3

4說明/提示

【資料範圍】

對於 100%100% 的資料,6 \le n \le 136≤n≤13。

題目翻譯來自nocow。

usaco training section 1.5

#include

#include

#include

using

namespace std;

int a[14]

;int ans[14]

;int b[25]

;int c[25]

;int n;

int countl=0;

void

dfs(

int step)

countl++

;return;}

for(

int i=

1;i1;i++)}

return;}

intmain()

八皇后問題

八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...

八皇后問題

include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...

八皇后問題

package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...