深度優先搜尋 poj 1321棋盤問題

2021-08-21 11:22:54 字數 1262 閱讀 7682

題目描述

棋盤問題

time limit:1000ms

memory limit:10000k

total submissions:63237

accepted:30234

description

在乙個給定形狀的棋盤(形狀可能是不規則的)上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放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 output

2

1

source

解題思路:從問題出發,可以看出是乙個搜尋問題,棋盤是不規則的,而且棋子也不一定是排滿的。需要對每乙個位置進行可不可以下棋搜尋,如果可以下,要考慮是否安排下棋。考慮到一行或者一列不能下兩個棋子,對沒行進行搜尋,搜尋到可以下的行需要考慮是否將棋子下入改行。最後考慮邊界,停止搜尋的邊界有兩個:一棋盤的邊界n、二棋子下完的邊界k。

#includeusing namespace std;

int way,result;//way表示已排多少棋子,result表示結果

int n,k;

int temp[10];//標記列是否已有棋子

char ch[10][10];

void dps(int l)//深度優先搜尋函式

if(l>=n)//設定陣列邊界

for(int i=0;i>n>>k&&(n!=-1||k!=-1))

return 0;

}

POJ 1321 棋盤問題 深度優先搜尋

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

列舉深度優先 棋盤問題POJ 1321

poj 1321 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個...

POJ 1321 棋盤問題 搜尋

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