由於棋盤有行列之分,示例是按列座標劃分的。如果乙個合適的列座標為
因此轉化為集合x=中哪些列排列的向量符合題中要求
滿足要求的向量有兩點:
>不能同行同列。由於在向量x中沒有重複元素,保證了不能同行同列
>不能在對角線上。這一點需要函式判定,不難看出兩個皇后在同一對角線上,當且僅當abs(x[i]-x[j])=abs(i-j)。
#include #include #include using namespace std;
bool validorder(int *start,int *end)
} }return true;
}int main()
; do
}while(next_permutation(a,a+8));
return 0;
}
八皇后(n皇后)
n皇后問題是經典的遞迴型問題。輸入說明 n代表皇后的數量 輸出說明 每行n個數字,一行代表乙個解。例如2413代表第1行皇后放在第2列,第2行皇后放在第4列,第3行皇后放在第1列,第4行皇后放在第3列。數字都是從1開始的。樣例輸入 4樣例輸出 2413 3142 include include us...
八皇后問題
八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...
八皇后問題
include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...