棋盤問題 POJ 1321(深搜水題)

2021-10-03 12:10:22 字數 1961 閱讀 2094

題目:

souce

problem

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

input

輸入含有多組測試資料。

每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將在乙個n*n的矩陣內描述棋盤,以及擺放棋子的數目。 n <= 8 , k <= n

當為-1 -1時表示輸入結束。

隨後的n行描述了棋盤的形狀:每行有n個字元,其中 # 表示棋盤區域, . 表示空白區域(資料保證不出現多餘的空白行或者空白列)。

output

對於每一組資料,給出一行輸出,輸出擺放的方案數目c (資料保證c<2^31)。

sample input

2 1#.

.#4 4

…#…#.

.#…#…

-1 -1

sample output21

思路:

求方案數,按行搜尋,記錄已擺放棋子的列,遞迴至下一行(若有),至行末或在此之前棋子數量達到k,則ans++

詳見**:

//data  2020:03:04

//time 16ms

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

const

int maxn =

1e4+10;

const

int inf =

0x3f3f3f3f

;const

double pi =

acos(-

1.0)

;int dz=

;int dx=

;int dy=

;struct p };

//int h, r, c, t;

//int s[55][55][55];

//int d[55][55][55];

//inline bool in_border (int mz, int mx, int my)

bool cmp (

const

void

* p1,

const

void

* p2)

int n, k, ans;

char s[10]

[10];

int vy[10]

;int

dfs(

int i,

int m)

if(k-m < n-i &&

dfs(i+

1, m)

)return1;

return0;

}int

main()

return0;

}

POJ 1321 棋盤問題 深搜)

漢語題意,題目類似八皇后問題,深搜即可。貌似可以用狀態壓縮過,有空再研究研究。172k 63ms include include include define n 9 using namespace std bool graph n n bool flag n n bool column n int...

poj 1321 棋盤問題(深搜)

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

POJ 1321 棋盤問題(深搜)

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