問題描述
在乙個給定形狀的棋盤(形狀可能是不規則的)上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放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
思路:
深度搜尋,每次搜尋不一樣的行,在一行中判斷每一列。
**:
#include#include#includeusing namespace std;
char a[10][10];
int b[10];
int n,k,num,cnt;
void dfs(int x)
if(x<1||x>n)return ;
for(int j=1;j<=n;j++)
}dfs(x+1);
}int main()
return 0;
}
簡單搜尋 DFS 棋盤問題
description 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,...
棋盤(dfs 剪枝)
題目描述 有乙個m mm m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你不需要花費金幣 ...
DFS 棋盤行走
題目描述 解題思路 可以看出n m n mn m是真的小哇!所以直接爆搜就可以了 如果想保險一點,可以嘗試前3步爆搜,後面寬搜 code include include include include using namespace std const int way 4 2 int n,m,a 2...