大意:给你一张棋盘,给你一定的棋子,空白区域不能放,问最多可能有几种方法。

思路:典型的搜索题目。

CODE:

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

const int SIZE = 80;
int v[SIZE];
char maze[SIZE][SIZE];
int n, k;
int cnt;


void dfs(int r, int num)
{
    if(num == k)
    {
        cnt++;
        return ;
    }
    if(r > n) return ;
    for(int i = 0; i < n; i++)
    {
        if(!v[i] && maze[r][i] == '#')
        {
            v[i] = 1;
            dfs(r+1, num+1);
            v[i] = 0;
        }
    }
    dfs(r+1, num);            //r列没有摆棋子。
}


int main()
{
    while(~scanf("%d%d", &n, &k))
    {
        if(n == -1 && k == -1break;
        for(int i = 0; i < n; i++)
        {
            scanf("%s", maze[i]);
        }
        memset(v, 0sizeof(v));
        cnt = 0;
        dfs(00);
        printf("%d\n", cnt);
    }
    return 0;
}

 

posted on 2012-08-31 15:21  有间博客  阅读(112)  评论(0编辑  收藏  举报