又要进入专题训练了
加油,zhoutonglx
#include<bits/stdc++.h>
using namespace std;
int n,k;
char a[20][20];
bool vis1[20];
bool vis2[20];
int sum;
void dfs(int x,int cot)//从上往下逐行搜索,不会重复
{
if(cot==k)
{
sum++;
return;
}
for(int i=x+1;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]=='#'&&vis1[i]==0&&vis2[j]==0)
{
vis1[i]=1;
vis2[j]=1;
dfs(i,cot+1);
vis1[i]=0;
vis2[j]=0;
}
}
}
}
int main()
{
while(cin>>n>>k)
{
sum=0;
if(n==-1&&k==-1)
break;
int i,j;
for(i=0;i<n;i++)
cin>>a[i];
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
for(j=0;j<n;j++)
{
for(int l=0;l<n;l++)
{
if(a[j][l]=='#')
{
vis1[j]=1;
vis2[l]=1;
dfs(j,1);
vis1[j]=0;
vis2[l]=0;
}
}
}
cout<<sum<<endl;
}
}