• HDU


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553


    #include <iostream>
    using namespace std;
    /****************************************************************************************************************
                题意:在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击
                     (即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
                      你的任务是,对于给定的N,求出有多少种合法的放置方法。
                思路:
                1,经典老题了,dfs,剪枝是关键!!!
                2,23333,我明显没有剪枝,直接打表,因为题目数据最大就是 10,(根本就不是N皇后)
                3,难点在于 : 不允许处在与棋盘边框成45角的斜线上,这个怎么描述。
                   后来看网上这么写 : i-id == ID[j]-j || i+id == ID[j]+j
                   即到对角线距离不想等。想的太简洁了。
                4,网上还有一种位运算的解法,不用打表,相当省时间。
                    
                    不会位运算,以后再看吧!碰到好几次了,好有用的样子!!!
    ****************************************************************************************************************/
    int n,num;
    int ID[11];
    void dfs(int id)
    {
        int flag;
        if(id==n+1){
            num++;
            return;
        }
        else{
            for(int i = 1;i <= n;i ++){
                ID[id]=i;       //尝试所有位置
                flag=1;
                for(int j = 1;j < id;j ++){
                    if(ID[j] == i || i-id == ID[j]-j || i+id == ID[j]+j){  //不在同一行,不在对角线
                                                                         //即到对角线距离不想等
                        flag=0;
                        break;
                    }
                }
                if(flag)
                    dfs(id+1);
            }
        }
    }
    int main()
    {
        int m;
        int ans[11];
        for(n = 1;n <= 10;n ++){
            num=0;
            dfs(1);
            ans[n]=num;
        }
        while(cin>>m){
            if(m == 0 || m > 10)  break;
            cout<<ans[m]<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    JavaScript经典语录
    ERP部门的添加(十一)
    List<T>Contains, Exists, Any之间的优缺点对比
    LINQ学习之旅(六)
    ERP仓库管理系统查询(十)
    MVC中Asp.Net管道(二)
    appfog 添加数据库支持
    appfog 使用
    java.util.ResourceBundle 读取国际化资源或配置文件
    Java 如何中断和恢复线程的执行
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6352018.html
Copyright © 2020-2023  润新知