#include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<cstring>
#include <cstdio>
#include <cmath>
#include <set>
#include<vector>
#include<cstring>
#define mod 998244353
using namespace std;
int mp[100][100];
int vis[100];
int n,m,sum;
void dfs(int row,int t)
{
if(t==m){
sum++; return ;}//先判断t==m 注意边界
if(row>n)return ;
for(int i=1;i<=n;i++)
{
if(mp[row][i]==1&&vis[i]==0)
{
vis[i]=1;
dfs(row+1,t+1);
vis[i]=0;
}
}
//3 2
dfs(row+1,t);//111
//111
//111情况 第三行也要填
return ;
}
int main()
{
while(cin>>n>>m&&n!=-1)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char c;cin>>c;
if(c=='#')mp[i][j]=1;
else mp[i][j]=0;
}
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// {
// cout<<mp[i][j]<<" ";
// }
// cout<<endl;
// }
sum=0;
dfs(1,0);
cout<<sum<<endl;
for(int i=1;i<=n;i++)
{
vis[i]=0;
for(int j=1;j<=n;j++){
mp[i][j]=0;
}
}
}
return 0;
}
简单搜索篇 棋盘问题 POJ - 1321
猜你喜欢
转载自blog.csdn.net/Stydwn/article/details/105366235
今日推荐
周排行