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

      POJ 1321

      题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子。 (注意 .不可放 #可放)

      解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标记,直至放完要求的棋子数。

    /*POJ 1321 棋盘问题 --- DFS*/
    #include <cstdio>
    #include <cstring>
    
    int n, k, cnt;
    bool visit[10]; //标记列的访问状态
    char mapp[10][10];
    
    /*从第r行开始正确放置p个棋子*/
    void dfs(int r, int p){
        if (p == 0){
            ++cnt;
            return;
        }
        if (r >= n || n-r < p) //剪枝 --> n-r >= p才能成功放置
            return;
        for (int j = 0; j < n; ++j){
            if (mapp[r][j] == '#' && !visit[j]){
                visit[j] = 1; //在r行j列放一枚棋子
                dfs(r + 1, p - 1);
                visit[j] = 0;
            }
        }
        dfs(r + 1, p); //由于棋子数小于行数, 可以第r行不放棋子,从下一行开始
    }
    
    int main()
    {
        while (scanf("%d%d", &n, &k) == 2){
            if (n == -1 && k == -1)
                break;
            cnt = 0;
            memset(visit, 0, sizeof visit);
            for (int i = 0; i < n; ++i){
                scanf("%s", mapp[i]);
            }
            dfs(0, k);
            printf("%d
    ", cnt);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    Xcode配置.pch文件
    iOS ViewController生命周期
    小技巧 -- 隐藏导航栏返回按钮附带的文字
    添加App启动页面
    iOS 关于nil和Nil及null与<null>的区别
    文件上传之组件
    js验证
    java mail
    validform 一款好用的表单验证插件
    tomcat启动时出错
  • 原文地址:https://www.cnblogs.com/tommychok/p/5020850.html
Copyright © 2011-2022 走看看