POJ 1321 棋盘问题
这道题是经典问题八皇后的变种
因为属于简单搜索所以我们用Dfs来做。
#include<bits/stdc++.h>
using namespace std;
char s[10];
int n,k,cnt;
char mp[10][10];
int a[10];
int init(){//初始化
memset(a,0,sizeof(a));
memset(mp,0,sizeof(mp));
cnt=0;
}
void dfs(int x,int tmp){
if(tmp==k){//如果放置了k个棋子 方案数+1
cnt++;
return;
}
if(x>n) return;
for(int i=1;i<=n;i++){
if(a[i]!=1&&mp[x][i]=='#'){
a[i]=1;
dfs(x+1,tmp+1);
a[i]=0;
}
}
dfs(x+1,tmp);//棋子数<棋盘行数 出现空行
}
int main(){
while(cin>>n>>k&&n!=-1&&k!=-1){
init();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){//将棋盘区域设为1 空白设为0
//if(s[i]=='#') mp[i][j]=1;
//else if(s[i]=='.') mp[i][j]=0;
cin>>mp[i][j];
}
}
dfs(1,0);
cout<<cnt<<endl;
}
return 0;
}