ACM篇 : POJ 1321 -- 棋盘问题

来源:互联网 发布:sun官方java教程 pdf 编辑:程序博客网 时间:2024/06/05 04:53

审题错误,可放和不可放的符号搞反了,浪费了好多时间。

深搜。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAX = 8;bool board[MAX+1][MAX+1];bool occu[MAX+1];int n;int k;int ans;int readchar(){    int t;    while (t = getchar())    {        if (t == '.' || t == '#')             break;    }    return t;}void _init(){    memset(board, 0, sizeof(board));    memset(occu, 0, sizeof(occu));}void read_board(){    for (int i = 1; i <= n; i++)        for (int j = 1; j <= n; j++)            board[i][j] = (readchar() == '#')  ? true : false;}void _dfs(int row, int laid){    if (laid == k)    {        ans++;        return;    }    if (row > n)         return;    for (int j = 1; j <= n; j++)    {        if (board[row][j] && !occu[j])        {            occu[j] = true;            _dfs(row+1, laid+1);            occu[j] = false;        }    }    _dfs(row+1, laid);}int main(){    while (scanf("%d%d", &n, &k) && n != -1 && k != -1)    {        _init();        read_board();        ans = 0;        _dfs(1, 0);        printf("%d\n", ans);    }    return 0;}
0 0
原创粉丝点击