codeup墓地 八皇后 排列問題

2021-09-11 11:07:35 字數 1315 閱讀 2422

會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上(有8 * 8個方格),使它們誰也不能被吃掉!這就是著名的八皇后問題。

對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a=b1b2…b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后問題一共有92組解(即92個不同的皇后串)。

給出乙個數b,要求輸出第b個串。串的比較是這樣的:皇后串x置於皇后串y之前,當且僅當將x視為整數時比y小。

第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括乙個正整數b(1 <= b <= 92)

輸出有n行,每行輸出對應乙個輸入。輸出應是乙個正整數,是對應於b的皇后串。

364

25

25713864

17582463

36824175

#include

#include

#include

using

namespace std;

const

int n =8;

//八皇后問題

int p[9]

=;//存放一組正確的解法

char ans[93]

[9]=

;//存放最終結果,以乙個數字形式展現

bool hashtable[n +1]

;//雜湊,以空間換時間,由於數字不能重複,需要這麼乙個標記作為重複與否判斷標記

int count =1;

//表示當前是按字典從小到大排序第幾個解

int temp =0;

/* * 八皇后問題主體函式和按字典從小到大實現1~n全排列本質上是一致的

* 1~n全排列可以看拆分成:「1」開頭的全排列,「2」開頭的全排列等等,然後以此類推,

* 在上面分類基礎上已經確定第乙個位置數字了 ,再從後一位置繼續相同的分治

*/void

generate

(int index)

count++

;return;}

/* * 當皇后放在index列 第x行時

* 判斷對角線是否滿足要求,不滿足則結束

* 滿足要求則遞迴,判斷後一位置

* 注:index位置的行號是從1~n迭代的

*/for(

int x =

1; x <= n; x++)}

if(flag)}}

}int

main()

}return0;

}

n皇后,排列樹

package com.alo.offer public class wolfqueen n代表當前是第幾個皇后 param n 皇后n在array n 列 int a private void check int n 從第一列開始放值,然後判斷是否和本行本列本斜線有衝突,如果ok,就進入下一行的邏...

Codeup墓地 問題 A 日期差值

有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天。有多組資料,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd 每組資料輸出一行,即日期差值 20130101 201301055 include int isleapyear int year 判斷是否是閏年...

Codeup遞迴 八皇后

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2.b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...