#include<iostream>
#include<cstring>
using namespace std;
const int N=22;
int n,k;
int res,cnt;
char s[N][N];
bool col[N];
void dfs(int u){
if(cnt == k){
res++;
return ;
}
if(u==n) return ;
for(int i=0;i<n;i++){
if(s[u][i] == '#' && !col[i]){
cnt++;
col[i] = true;
dfs(u+1);
col[i] = false;
cnt--;
}
}
dfs(u+1);
}
int main(){
while(scanf("%d%d",&n,&k)){
if(n==-1 && k==-1) break;
for(int i=0;i<n;i++) scanf("%s",s[i]);
res = cnt = 0;
memset(col,false,sizeof col);
dfs(0);
printf("%d\n",res);
}
}
棋盘问题(c++求解)
最新推荐文章于 2024-05-17 18:19:24 发布
本文介绍了一个C++程序,通过深度优先搜索算法在给定的二维字符网格中,计算从起始位置到包含特定字符#的k个不同位置的路径数量。
摘要由CSDN通过智能技术生成