題目:(洛谷 p1219)
乙個如下的 6×6 的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行、每列有且只有乙個,每條對角線(包括兩條主對角線的所有平行線)上至多有乙個棋子。
上面的布局可以用序列 2 4 6 1 3 5來描述,第 i個數字表示在第 i行的相應位置有乙個棋子,如下:
行號 1 2 3 4 5 6
列號 2 4 6 1 3 5
這只是棋子放置的乙個解。請編乙個程式找出所有棋子放置的解。
並把它們以上面的序列方法輸出,解按字典順序排列。
請輸出前 3個解。最後一行是解的總個數。
輸入格式
一行乙個正整數 nnn,表示棋盤是 n×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%100% 的資料,6≤n≤13。
題解:
皇后是西洋棋中的棋子,可以在橫豎左斜右斜八個方向上移動,相同的皇后
不能處在其他皇后的這八個方向上,我們以行為深度進行搜尋,這樣還需記錄列、左斜、右斜三個方向是否能被訪問到。左斜的座標規律:橫縱座標值和為定值。右斜座標規律:橫縱座標之差為定值。)
**:
#include
using namespace std;
int n,ans,a[20];
bool line[20];//標記列元素是否被訪問;
bool l[40],r[40];//標記左斜與右斜元素是否被訪問;
void print()
for(int i=1;i<=n;i++)}}
int main()
執行結果:
|洛谷提交|:
八皇后(深搜)
八皇后 總時間限制 1000ms 記憶體限制 65536kb 描述 會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1...
n皇后問題 深搜回溯dfs
問題介紹 n皇后問題是乙個以西洋棋為背景的問題 如何能夠在n n的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。eg 在n n 格的棋盤上放置彼此不受攻擊的n 個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同...
八皇后 簡單深搜
檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 4 6 1...