題目:標籤:深度優先搜尋
【題解】
題目條件:使得每行、每列有且只有乙個棋子,每條對角線(包括兩條主對角線的所有平行線)上至多有乙個棋子。
所以這裡用 a[150], b[150], c[150], d[150] 四個陣列來標記資訊,它們分別對應行、列、右上到左下對角線、左上到右下對角線的資訊。
技巧:對於一條從右上到左下的對角線,其上的棋子座標應滿足x+y為一定值;對於一條從左上到右下的對角線,其上的棋子座標應滿足x-y為一定值,為了避免負數的產生,**中用x-y+n來儲存數字。
ac**:
#include
using
namespace std;
//分別是行、列、右上到左下對角線、左上到右下對角線資訊。
int a[
150]
, b[
150]
, c[
150]
, d[
150]
;int n, total =0;
//n是n*n棋盤,total是解的總數
void
print_num()
//列印函式
}void
dfs(
int i)
//i是行號,下面的j是列號}}
intmain()
洛谷 P1219 八皇后
題目描述 檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 ...
洛谷 P1219 八皇后
題目描述 檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 ...
洛谷p1219 八皇后
題目描述 檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 ...