回檔 N皇后

2022-09-03 23:45:23 字數 1365 閱讀 9431

描述

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

列號1  2  3  4  5  6

-------------------------

1 |  | o |  |  |  |  |

-------------------------

2 |  |  |  | o |  |  |

-------------------------

3 |  |  |  |  |  | o |

-------------------------

4 | o |  |  |  |  |  |

-------------------------

5 |  |  | o |  |  |  |

-------------------------

6 |  |  |  |  | o |  |

-------------------------

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

行號 1 2 3 4 5

6列號 2 4 6 1 3

5這只是跳棋放置的乙個解。請編乙個程式找出所有跳棋放置的解。並把它們以上面的序列方法輸出。解按字典順序排列。請輸出前3個解。最後一行是解的總個數。

特別注意: 對於更大的n(棋盤大小n x

n)你的程式應當改進得更有效。不要事先計算出所有解然後只輸出(或是找到乙個關於它的公式),這是作弊。如果你堅持作弊,那麼你登陸tyvj的帳號將被無警告刪除

輸入格式

乙個數字n (6

<= n <= 13) 表示棋盤是n x n大小的。

輸出格式

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

題目分析:

廣搜過之。n=13時貌似1.幾秒出,不用打表對得起誰啊?

源**:

#include

using

namespace

std;

int ans[20

]; bool vis[20

]; bool add[20],sub[50

]; int

n,num;

void dfs(int

x) }

for (int i=1; i<=n; i++)

} } int

main()

dfs(

1);

printf(

"%d\n

",num);

return0;

}

八皇后 n皇后 2n皇后

n n 的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入 n n 個黑皇后和 n n 個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n n 小於等於 88。輸入的第一行為乙個整數 n n,表示棋盤的大...

八皇后(n皇后)

n皇后問題是經典的遞迴型問題。輸入說明 n代表皇后的數量 輸出說明 每行n個數字,一行代表乙個解。例如2413代表第1行皇后放在第2列,第2行皇后放在第4列,第3行皇后放在第1列,第4行皇后放在第3列。數字都是從1開始的。樣例輸入 4樣例輸出 2413 3142 include include us...

LeetCode演算法 N皇后 N皇后II

n皇后問題研究的是如何將 n?個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。給定乙個整數 n,返回所有不同的?n?皇后問題的解決方案。每一種解法包含乙個明確的?n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 輸入 4 輸出 q 解法 1 q q q.q.解...