poj1321棋盘问题

来源:互联网 发布:美国大数据公司 年薪 编辑:程序博客网 时间:2024/06/07 03:42

这个题吧,是这么回事,应该用这样的方法来,枚举每一行的情况,然后dfs,其实dfs我感觉还是挺难的,本来是刷紫书,但是真的刷不动了,所以就来点简单题

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;char map[10][10];int n , k , tot , m , book[20];void dfs(int cur){    if(m == k){        tot++;//来一发        return;    }    if(cur >= n) return;//爆了,下一个    for(int j = 0 ; j < n ; j++){        if(book[j] == 0 && map[cur][j] == '#'){            m++;            book[j] = 1;//mark            dfs(cur + 1);            m--;            book[j] = 0;// 清楚标记        }    }    dfs(cur + 1);//来下一行}int main(){    while(~scanf("%d %d", &n , &k)){        if(n == -1 && k == -1) break;        tot = 0 , m = 0;        for(int i = 0 ; i < n ; i++)            scanf("%s",map[i]);        dfs(0);        printf("%d\n",tot);    }}
0 0