#include<cstdio>
#include<cstring>
using namespace std;
char chess[10][10];
bool book[10];//記錄此列有無被放置棋子
int n,k,num,way;
void dfs(int row){
if(num==k){
way++;
return;
}
if(row>=n) return;//從0開始
for(int col=0;col<n;col++){
if(!book[col]&&chess[row][col]=='#'){
num++;
book[col]=true;
dfs(row+1);
book[col]=false;//此時此節點的枝葉已經被搜索完畢,重置
num--;
}
}
dfs(row+1);//逐行放置棋子,遍歷圖表
}
int main(){
while(~scanf("%d %d",&n,&k)&&n!=-1){
way=num=0;
memset(book,false,sizeof(book));
memset(chess,'.',sizeof(chess));
for(int i=0;i<n;i++) scanf("%s",&chess[i]);
dfs(0);
printf("%d\n",way);
}
return 0;
}
POJ 1321 棋盤問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.