棋盘问题

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<string.h>
#include<algorithm>

using namespace std;
const int maxn=30;
char maps[maxn][maxn];
int vis[maxn];
int n, k, ans, num;

void dfs(int m)
{
    if(num==k)
    {
        ans++;
        return;
    }
    if(m>=n)return;
    for(int i=0; i<n; i++)
    {
        if(!vis[i]&&maps[m][i]=='#')
        {
            num++;
            vis[i]=1;
            dfs(m+1);
            vis[i]=0;
            num--;
        }
    }
    dfs(m+1);
}
int main()
{
    while(scanf("%d %d", &n, &k), n!=-1 || k!=-1)
    {
        ans=0, num=0;
        for(int i=0; i<n; i++)
            scanf("%s", maps[i]);
        memset(vis, 0, sizeof(vis));
        dfs(0);
        printf("%d\n", ans);
    }
    return 0;
}

 

posted @ 2017-04-05 16:33  爱记录一切美好的微笑  阅读(96)  评论(0编辑  收藏  举报