POJ 1321 棋盤問題 DFS

2022-08-28 17:45:10 字數 1074 閱讀 7633

poj 1321 -- 棋盤問題(dfs)

解題思路:

dfs(程式中寫成bfs完全手抖筆誤...

只有棋盤區域'#'可以放棋子,如果棋盤區域的個數sumn與棋子數k相等,那麼只有一種擺放方案...

如果sumn>k,則使用dfs進行搜尋

設定狀態陣列

bool square[10][10]

,若是'#'則為true,否則為false。

由於棋子都是一樣的,擺放沒有順序之分。為了保證每一行只放乙個棋子,所以,從第一行開始遍歷,檢視第一行的所有列,如果有空格,則可以在這個格仔中選擇放下棋子,同時標記這一列不能再放其他棋子。

bool col[10]的下標為列號,放入棋子後,標記該列為false

之後進入下一行...

當剩餘棋子數為0時,表明一套擺放方案已經完成,進行回溯...

1 #include2 #include3 #include4

using

namespace

std;

5int n,k;///

將在乙個n*n的矩陣內描述棋盤,以及擺放棋子的數目

6bool square[10][10];7

bool col[10];8

intans;

9void bfs(int x,int

num)

10 16

///前x行已經決定是否要放棋子

17for(int i=x+1;i<=n;i++)///行18

POJ 1321 棋盤問題(棋盤DFS)

棋盤問題 思路 分層查詢,逐行深搜。注意k n時的處理。1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 include 10 define ll long long 11 define...

POJ 1321 棋盤問題 DFS

題意 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。題解 include using namespace std define n 10 bo...

poj 1321 棋盤問題(DFS)

大概題意就是給你乙個棋盤,讓你放棋子,求在棋盤n n上的 放上k個棋子的所有情況的數目。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列。深搜可以搜尋出所有答案。直接看 include includebool chess 9 9 bool vis col 9 int n,k,ans void...