zoukankan      html  css  js  c++  java
  • 八皇后

    推荐博客 :http://blog.163.com/yichangjun1989@126/blog/static/13197202820145226051666/

    问题描述 :

      在一个 8 * 8 的棋盘上 , 可以放置8个皇后 , 皇后们如果在相同的一行或一列就会相互攻击,或者是在斜的对角线上也会相互攻击 ,问最多有多少种放置方法?

    思路 :

      若要确保不再同一行,第一次可以在第一行放一个,第二次就直接放在第二行的位置,建一个数组 c[ i ] = j ,有什么作用呢 ? 第 i 个位置所在的列是 j  列。每次寻找的一个新位置如果符合与前面所有的已放置的位置都符合情况的话则递归进入下一层 。

    代码示例 :

    int ans = 0;
    int c[10];
    
    void dfs(int r){
        if (r > 8) {
            ans++;
            return;
        } 
        
        for(int i = 1; i <= 8; i++){
            c[r] = i;
            int sign = 1;
            for(int j = 1; j < r; j++){
                if (c[r] == c[j] || r - j == c[r] - c[j] || j - r == c[r] - c[j]){ // 判断不在同一列,也不在斜着的对角线上
                    sign = 0;
                    break;
                }
            }
            if (sign) dfs(r+1);
        }
    }
    
    int main() {
        
        dfs(1);
        printf("%d
    ", ans);
        return 0;
    }
    
    东北日出西边雨 道是无情却有情
  • 相关阅读:
    Drupal 学习笔记 (4)
    property和field有什么区别
    Razor4Orchard v1.2
    Mono喜迁新家http://www.xamarin.com/
    jq中获取属性名的方法
    jquery中的文档操作之五
    PHP基础知识之三
    php基础知识之一
    注意点
    jquery中ajax的学习之$.ajax()
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/7723446.html
Copyright © 2011-2022 走看看