例题链接:
https://vjudge.net/contest/339651#problem/B
#include <cstdio>
#include <iostream>
using namespace std;
char a[10][10];
int biaoji[10];
int sum,num;
int m,n;
void DFS(int x)
{
if(num==n)
{
sum++;
return ; //sum满足条件,记得返回
}
if(x>m) return;
for (int i=1;i<=m;i++)
{
if(biaoji[i]==0&&a[x][i]=='#')
{
num++;
biaoji[i]=1;
DFS(x+1);
biaoji[i]=0;
num--;
}
}
DFS(x+1);
}
int main ()
{
while (cin >> m >> n)
{
if(m==-1&&n==-1) break;
memset(biaoji, 0, sizeof(biaoji));
for (int i=1;i<=m;i++)
for (int j=1;j<=m;j++)
cin >> a[i][j];
num=0;
sum=0;
DFS(1);
cout << sum << endl;
}
}



京公网安备 11010502036488号