Description
Input
Output
Sample Input
2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1
Sample Output
2 1
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, k, ans;
bool visit[10];
char maps[10][10];
void DFS(int z, int t);
int main()
{
    int i, j;
    while(cin >> n >> k, /*n!=-1 || k!=-1*/!(n==-1&&k==-1))
    {
        for(i=0; i<n; i++)
        {
            getchar();
            for(j=0; j<n; j++)
                cin >> maps[i][j];
        }
        memset(visit, 0, sizeof(visit));
        ans=0;
        DFS(0, 0);
        cout << ans << endl;
    }
    return 0;
}
void DFS(int z, int t)
{
    if(t==k)
    {
        ans++;
        return;
    }
    if(z>=n)
        return;
    for(int i=0; i<n; i++)
    {
        if(!visit[i]&&maps[i][z]==‘#‘)
        {
            visit[i]=true;
            DFS(z+1, t+1);
            visit[i]=false;
        }
    }
    DFS(z+1, t);
}
原文:http://www.cnblogs.com/wazqWAZQ1/p/4463672.html