• 题目1140:八皇后


    题目描述:

    会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 
    对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
    给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。

    输入:

    第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)

    输出:

    输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。

    样例输入:
    2
    1
    92
    样例输出:
    15863724
    84136275

    Code:
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
    vector<int> ansVec;
    bool mark[10];
     
    int abs(int x){
        return x>0?x:-x;
    }
     
    void initMark(){
        for(int i=0;i<10;++i)
            mark[i]=true;
    }
     
    bool check(int num){
        for(int i=0;i<num-1;++i){
            for(int j=i+1;j<num;++j){
                if(abs(i-j)==abs(ansVec[i]-ansVec[j]))
                    return false;
            }
        }
        return true;
    }
     
    int cnt;
     
    void DFS(int num,int n){
        if(!check(num))
                return;
        if(ansVec.size()==8){
            ++cnt;
            if(cnt==n){
                vector<int>::iterator iter;
                for(iter=ansVec.begin();iter!=ansVec.end();++iter)
                    cout<<*iter;
                cout<<endl;
            }
            return;
        }
        for(int i=1;i<=8;++i){
            if(mark[i]==false)
                continue;
            mark[i]=false;
            ansVec.push_back(i);
            DFS(num+1,n);
            mark[i]=true;
            ansVec.pop_back();
        }
        return;
    }
     
    int main()
    {
        int n,x;
        while(cin>>n){
            while(n--){
                cin>>x;
                cnt=0;
                initMark();
                DFS(0,x);
            }
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1140
        User: lcyvino
        Language: C++
        Result: Accepted
        Time:80 ms
        Memory:1520 kb
    ****************************************************************/
  • 相关阅读:
    TIDB的体系结构学习
    TIDB操作相关命令
    TIDB的分布式事物
    FeignClient支持application/xwwwformurlencoded请求
    sublime json格式化
    VC++60MFC学习右键菜单RMenu
    VC++60新建MFC框架程序 对话框程序
    MAC 前端准备环境
    二叉树的基本知识
    电脑广告来源记录
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4204162.html
Copyright © 2020-2023  润新知