洛谷 P1562 還是N皇后

2021-10-06 06:33:38 字數 607 閱讀 4832

傳送門:

參考部落格:

這題一開始用普通dfs,超時。

看大佬用位運算,我也來試試。不同的是,我用0表示不可放置,1表示可放置,那麼,在dfs的引數傳遞時有點麻煩

dfs函式中,p中的1,表示該行放置的位置,在進一步dfs時,考慮到對下一行的影響,~p才表示可放置的位置。

在同一列的角度,應當是當前列&~p:row&~p

在主對角線(left diagonal),應當是(當前狀態&~p)>>1,再高位補1,注意此時補的1應當為(1<>1)

在次對角線(right diagonal),應當是(當前狀態&~p)<<1,再低位補1,此時補的1是真的1。

不得不說,這麼做非常麻煩,還是可放置用0表示,不可放置用1表示方便寫程式。

我倔強地debug了2個多小時才把位運算這裡搞完。唉,太菜了。!!!

#include #include int n;

int ans;

int map[15];

int allone;

void dfs(int i,int row,int ld,int rd);

int main(void)

}

P1562 還是N皇后

p1562 還是n皇后 原來,就會位運算搞八皇后,當複習一下。可行的位置是1,其他是0 比如11011 到下一行的時候,對應的左斜線和右斜線要移一位 1 include2 include3 include4 include5 include6 include7 include8 define inf...

洛谷1219N皇后

題目描述 乙個如下的 6 66 times 66 6 的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列 2 4 6 1 3 52 4 6 1 3 52 4 6 1 3 5 來描述,第 iii 個數字表示...

位運算n皇后 洛谷1219

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