#include<iostream>
using namespace std;
int n,k,ans;
const int N=1e2;
char a[N][N];
bool vis[N];
void dfs(int lev,int k_num){
if(k_num==0){
++ans;
return ;
}
if(lev==n+1) return ;
for(int i=1;i<=n;i++){
if(vis[i]==false&&a[lev][i]=='#'){
vis[i]=true;
a[lev][i]='.';
dfs(lev+1,k_num-1);
vis[i]=0,a[lev][i]='#';//回溯
}
}
dfs(lev+1,k_num);
}
int main(){
while(cin>>n>>k){
if(n==-1 && k==-1) break;
ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
dfs(1,k);
cout<<ans<<endl;
}
return 0;
}
POJ - 1321 棋盘问题 c++代码
最新推荐文章于 2024-01-03 18:30:47 发布