NOJ1267 N皇后(非位運算)

2021-05-23 06:31:44 字數 642 閱讀 8188

/*nqueen問題如果用簡單的條件(即每次準備在第i行上找擺皇后的位置的時候,就從第i行的第0列到第n列

依次找符合條件的點(看和前面已經擺好皇后的i-1個皇后比較,看是否在同一列上是否在同一主對角線或

者副對角線上))搜尋,這個過程耗時較多。解決方法:每放乙個皇后,就將該皇后所在位置的列號作為

lie陣列的下標,並將lie陣列的該元素置為1,因為在矩陣中的特性(平行於主對角線的直線上的點的

橫、縱座標之差為定值(這邊要加上n,因為陣列下標沒有負數),平行於主對角線的直線上的點的橫、縱

座標之和為定值),所以可以將擺皇后的位置的橫、縱座標的差以及和分別作為zhu和fu陣列的下標,

並將之置為1,但是在改點的回溯完成後要講因為在該點擺皇后所產生的lie、zhu、fu陣列對應下標的元素

的值置0,因為這題要的是所有結果方案數*/

#include

#include

#define n 25

int n,top,lie[n],zhu[n],fu[n];

int search(int cur)

else

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

}return 0;

}int main()

return 0;

}

n皇后 位運算版

n皇后問題是大家在遞迴裡會碰到的乙個經典問題。以前高中我學dfs的時候,老師首先讓我看的就是八皇后。不過這皇后的時間複雜度大家可想而知了。而接下來的位運算將這個效率重新提到乙個高度。我是以前在matrix67大牛那裡學的,最近資料結構實驗剛好碰到n皇后,就在這裡 複述 一遍吧。code void d...

位運算解決N 皇后問題

描述 位運算是定義在整數上的運算。但在做位運算的時候,並不把整數看作整數,而是將它們看做一系列二進位制數字,逐位進行運算。位運算有6種,他們的名稱,運算子及運算規則如下 與 and 5 6 4 101 110 100 或 or 5 6 7 101 110 111 異或 xor 5 6 3 101 1...

位運算n皇后 洛谷1219

老鐵已經很久沒有更博了。自從考完noip後老鐵一蹶不振,從此走上心理陰影無限大,吾將上下而求索的道路。又去石家莊聽課 並不能聽懂 於是自己學一學一些奇怪的演算法。題目描述 檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行...