回溯經典(指定位置N皇后問題)

2022-06-06 02:39:10 字數 1054 閱讀 3250

n皇后問題自不必多說,這道題的先行條件是在放置的時候已經指定了乙個棋子的位置。

輸入第一行為n,第二行為指定棋子的座標(x,y);輸出方案總數以及按字典序公升序的各種方案。

思路:

首先是回溯,其次對待指定棋子有三種方法:

列舉所有情況,最後判斷

在列舉到那一行的時候只讓棋子下在指定的那一列

初始化vis陣列時進行標記,同時跳過列舉x行和y列

第三種我沒寫出來,但很明顯比前兩種要快得多,第二種比第一種快了100多ms

**如下:

第一種,耗時327ms:

#include

#include

#include

using

namespace

std;

int n, x, y, tot = 0;

int vis[3][100], c[20];

int ans[1000000][20];

void search(int cur)

else

for (int i = 0; i < n; i++)

}}int main()

printf("\n");

}return

0;}

第二種,耗時221ms

#include

#include

#include

using

namespace

std;

int n, x, y, tot = 0;

int vis[3][100], c[20];

int ans[1000000][20];

void search(int cur)

if (cur == n)

else

for (int i = 0; i < n; i++)

}}int main()

printf("\n");

}return

0;}

回溯經典 n皇后問題

題目大意 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當 ...

n皇后問題 經典回溯

n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。輸入 4輸出 q.解法 1 q q.q.q.解法 2...

回溯法 經典n皇后問題

太懶了直接搬了 演算法框架 迭代版int a n i 初始化a n i 1 while i 0 有路可走 and 未達到目標 還沒有回溯到頭 else if a i 在搜尋空間內 else 遞迴版 int a n try int i 例如hdoj的2553就是經典回溯法 ac 注意要打表不然會tle...