zoukankan      html  css  js  c++  java
  • POJ

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

    分析:

    1、和八皇后很相似,一行一行的放,并判断该列是否放过。

    2、唯一注意的是,因为要摆放的棋子数k可能小于棋盘的行数,所以不一定是从第一行开始放的,所以每行的情况都要搜一下。

    #include<cstdio>
    #include<cstring>
    using namespace std;
    char pic[10][10];
    int n, k;
    bool judge(int x, int y){
        return x >= 0 && x < n && y >= 0 && y < n;
    }
    int ans;
    bool vis[10];
    void dfs(int cur, int cnt){
        if(cnt == k){
            ++ans;
            return;
        }
        if(cur == n) return;
        for(int i = 0; i < n; ++i){
            if(pic[cur][i] == '#' && !vis[i]){
                vis[i] = true;
                dfs(cur + 1, cnt + 1);
                vis[i] = false;
            }
        }
        dfs(cur + 1, cnt);
    }
    int main(){
        while(scanf("%d%d", &n, &k) == 2){
            if(n == -1 && k == -1) return 0;
            memset(vis, 0, sizeof vis);
            for(int i = 0; i < n; ++i){
                scanf("%s", pic[i]);
            }
            ans = 0;
            dfs(0, 0);
            printf("%d
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    Day 03
    Day 02
    Day 01
    re正则表达四
    python学习05之数据可视化
    python学习04之柱形图和热图
    python学习03之线图表
    python的学习02之数据处理
    python的学习01之csv文件处理
    中国大学排名实例
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/6657391.html
Copyright © 2011-2022 走看看