POJ 1321 棋盤問題

2021-09-30 19:18:14 字數 655 閱讀 5056

這一題的話,我們搜尋的時候,邊界條件就是棋子的數目等於k,這時候方案數加一然後return。

如果超過行號的最大值,我們也返回,不過不做任何操作,這也是乙個邊界條件。

如果 r 行的 j 個位置是棋盤並且這一列沒有放入棋子,我們就放入一顆棋子,該列標記為1,已放棋子數加一,然後訪問下一行。

這個遞迴結束以後,我們就把它的標記清空,放入棋子數減一,還原之前的情況,然後遞迴搜尋這一行不放棋子的方案數。

#include

#include

using namespace std;

int map[10]

[10];

int vis[10]

;int n, k, ans, cnt;

void

dfs(

int r)

if(r>=n)

return

;for

(int j =

0; j < n;j++)}

dfs(r +1)

;}intmain()

}

ans = cnt =0;

dfs(0)

; cout << ans << endl;

}return0;

}

POJ 1321 棋盤問題

time limit 1000ms memory limit 10000k total submissions 7007 accepted 3390 description 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列...

poj 1321 棋盤問題

棋盤問題 time limit 1000ms memory limit 10000k total submissions 15365 accepted 7600 description 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一...

POJ 1321 棋盤問題

找到第乙個有 的行開始回溯就可以了 include include using namespace std const int maxn 9 char board maxn maxn bool c maxn int ans,n,k void backtracking int curi,int cnt...