• 棋盘问题 POJ


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n, k;
    const int maxn = 10;
    char chess[maxn][maxn];
    int vis_y[maxn];        //判断该列是否已经有棋子
    int sum;
    void dfs(int x, int rem)
    {
        if(rem == 0)
        {
            sum++;      //已找到一种方案
            return ;
        }
        for(int i = x; i < n; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(chess[i][j] == '#' && !vis_y[j])   //表示未访问过的棋盘区域
                {
                    vis_y[j] = 1;
                    dfs(i+1, rem-1);
                    vis_y[j] = 0;     //无论有没有结果,已经完成一次dfs后要保证能重新再次寻找
                }
            }
        }
    
    }
    int main()
    {
        while(cin >> n >> k && n != -1 && k != -1)
        {
            sum = 0;
            memset(chess, 0, sizeof(chess));
            memset(vis_y, 0, sizeof(vis_y));
            for(int i = 0; i < n; i++)
                scanf("%s", chess[i]);
            dfs(0, k);
            cout << sum << endl;
        }
    }
    
  • 相关阅读:
    预防新型冠状病毒科普宣传网站
    四则运算
    结对审查
    最大子段和
    单元自动测试Junit
    浅谈过去,畅想未来
    第一次的结对编程
    代码审查
    单元测试
    junit4单元测试
  • 原文地址:https://www.cnblogs.com/KeepZ/p/11143766.html
Copyright © 2020-2023  润新知