題目描述
棋盤問題
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 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一...