zoukankan      html  css  js  c++  java
  • POJ 1321棋盘问题

    题意: 给定一个n*n(n<=8)的棋盘, 有些地方能放棋子, 有些不能。 放m个棋子, 求能使这m个棋子不同行且不同列的方案数。

    分析: 用一个一维数组标记行和列, 深搜一下。

    #include<cstdio>
    #include<cstring>
    char s[10][10];
    int n, m;
    int vis[10];
    int ans;
    void dfs(int cur, int step)
    {
        if(step==m)
        {
            ans++;
            return;
        }
        if(cur>n-1) return;
        for(int i=cur; i<n; i++)
        for(int j=0; j<n; j++)
        if(s[i][j]=='#'&&!vis[j])
        {
            vis[j]=1;
            dfs(i+1, step+1);
            vis[j]=0;
        }
    }
    
    int main()
    {
        while(scanf("%d%d", &n, &m))
        {
            if(n==-1&&m==-1) break;
            for(int i=0; i<n; i++)
            scanf("%s", s[i]);
            memset(vis, 0, sizeof(vis));
            ans = 0;
            dfs(0, 0);
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    2019/10/9 CSP-S 模拟测
    简单的面向对象
    魔术变量
    函数
    全局变量
    超级全局变量
    for循环
    while循环
    php数组排序
    python打造XslGenerator
  • 原文地址:https://www.cnblogs.com/acm1314/p/4741817.html
Copyright © 2011-2022 走看看