例题链接:
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;
    }
}