洛谷 [USACO1.5]八皇后 Checker Challenge
阿新 • • 發佈:2020-10-27
題目描述
一個如下的6×6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行、每列有且只有一個,每條對角線(包括兩條主對角線的所有平行線)上至多有一個棋子。
上面的佈局可以用序列246135來描述,第ii個數字表示在第ii行的相應位置有一個棋子,如下:
行號123456
列號246135
這只是棋子放置的一個解。請編一個程式找出所有棋子放置的解。
並把它們以上面的序列方法輸出,解按字典順序排列。
請輸出前33個解。最後一行是解的總個數。
輸入格式
一行一個正整數n,表示棋盤是n×n大小的。
輸出格式
前三行為前三個解,每個解的兩個數字之間用一個空格隔開。第四行只有一個數字,表示解的總數。
輸入輸出樣例
輸入 #16輸出 #1
2 4 6 1 3 5 3 6 2 5 1 4 4 1 5 2 6 3 4
說明/提示
【資料範圍】
對於100\%100%的資料,6≤n≤13。
dfs和回溯
b [ i ] 表示第 i 列的佔用情況。而行的佔用情況用迴圈控制,每行有且只有一個。
c [ ] 和 d [ ] 十分巧妙地表示了斜線的佔用情況。d的角標+n是防止出現 i - j < 0 的情況,整體平移n。