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;
    }
    
  • 相关阅读:
    大数据面试(hbase)
    大数据面试(spark)
    大数据面试(kafka)
    ssm整合cas单点登录
    sm整合shiro权限控制
    js中的this机制
    xftp个人版下载
    window.innerHeight属性和用法
    使用elementui图标按钮调整宽高后图标不居中
    git常用的操作记录一下
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/6657391.html
Copyright © 2011-2022 走看看