其他分享
首页 > 其他分享> > acwing kuangbin专题打卡第一题棋盘问题

acwing kuangbin专题打卡第一题棋盘问题

作者:互联网

acwing 1114.棋盘问题
传送门

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 10;
char g[N][N];
bool line[N];//因为每次直接处理下一行,所以只需要标记列即可
int n, k, m;
int res;
void dfs(int x)//按行进行摆放然后爆搜
{
    if (m == k) 
    {
        res ++;
        return ;
    }
    else if (x == n) return ;
    for (int i = 0; i < n; i ++)
        if (!line[i] && g[x][i] == '#')
        {
            line[i] = true;//进行摆放
            m ++;
            dfs(x + 1);
            m --;
            line[i] = false;//恢复现场
        }
    dfs(x + 1);//此行也可以不放棋子
}
int main()
{
    while (scanf("%d%d", &n, &k) || ( n != -1 && k != -1))
    {
        for (int i = 0; i < n; i ++) cin >> g[i];
        res = 0;
        m = 0;
        memset(line, false, sizeof(line));
        dfs(0);
        printf("%d\n", res);
    }
    return 0;
}

标签:int,res,dfs,棋子,kuangbin,打卡,include,line,acwing
来源: https://blog.csdn.net/qq_51676853/article/details/122691515