• (深搜)棋盘问题 -- poj -- 1321


    链接:

    http://poj.org/problem?id=1321

    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 28899   Accepted: 14307

    Description

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。

    Input

    输入含有多组测试数据。 
    每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 
    当为-1 -1时表示输入结束。 
    随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。 

    Output

    对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。

    Sample Input

    2 1
    #.
    .#
    4 4
    ...#
    ..#.
    .#..
    #...
    -1 -1
    

    Sample Output

    2
    1

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    #include <queue>
    
    using namespace std;
    
    #define N 11
    
    int n, k, vis[N], z, num;
    char s[N][N];
    
    void DFS(int m)
    {
        if(num==k)
        {
            z++;
            return ;
        }
        if(m>=n)
            return ;
    
        for(int i=0; i<n; i++)
        {
            if(!vis[i] && s[m][i]=='#')
            {
                vis[i] = 1;
                num++;
                DFS(m+1);
                vis[i] = 0;
                num--;
            }
        }
        DFS(m+1);
    }
    
    int main()
    {
        while(scanf("%d%d", &n, &k)!=EOF)
        {
            if(n==-1 && k==-1)
                break;
    
            int i;
    
            memset(s, 0, sizeof(s));
            memset(vis, 0, sizeof(vis));
    
            for(i=0; i<n; i++)
                scanf("%s", s[i]);
    
            num = z = 0;
            DFS(0);
    
            printf("%d
    ", z);
        }
        return  0;
    }
    勿忘初心
  • 相关阅读:
    使用PDO连接数据库
    ES6 promise
    弹框小三角
    封装弹窗功能
    css3 省略号
    使mac支持NTFS读写问题
    Vue 打包 build 前需要修改哪些配置和路径
    eslint配置大全
    在elementUI中使用 el-autocomplete 实现远程搜索的下拉框
    element-UI table自定义表头
  • 原文地址:https://www.cnblogs.com/YY56/p/4782758.html
Copyright © 2020-2023  润新知