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

    这是一个很经典的搜索题目;

    在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。输入无输入。输出按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。

    皇后能吃掉同一行,同一列,同一对角线的角色;

    所以要把八个皇后放在8*8的棋盘上,保证任意皇后并不能互相吃;在这个问题中有92个解;要求依次输出;可以扩展成n皇后问题,以及各种改版的八皇后问题;

    下面是一般八皇后问题深搜的代码;

    #include<iostream>
    using namespace std;
    
    int lie[100],a,su=0;
    bool hang[100],d[100],dd[100];
    //用三个bool和一个int数组完成搜索及回溯;具体过程不需讲;
    void p(void);
    void s(int);
    
    int main()
    {
        //cin>>a;可以拓展成n皇后;
        a=8;
        s(1);
        //cout<<su;可以输出解个数;
        return 0;
    }
    
    void s(int sum)//搜索函数;
    {
        int i;
        for(i=1;i<=a;++i)
            if((!hang[i])&&!(d[i+sum])&&!(dd[sum-i+a-1]))
            {
                lie[sum]=i;
                hang[i]=1;d[i+sum]=1;dd[sum-i+a-1]=1;
                if(sum==a)
                {
                    su++;
                    p();
                }
                else s(sum+1);
                hang[i]=0;d[i+sum]=0;dd[sum-i+a-1]=0;
            }
    }
    
    void p(void)
    {
        cout<<"No. "<<su<<endl;
        for(int i=1;i<=a;++i)
            {    
                for(int j=1;j<=a;++j)
                    if(i==lie[j])//将所有解的矩阵输出,1代表有皇后
                        cout<<"1 ";
                    else cout<<"0 ";
                cout<<endl;
                        
            }
    }

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

    这是noi题库上一个改版的八皇后问题;要求输出指定的皇后串;皇后串的排列为按整数大小

    第一个皇后串15863724;
    最后一个皇后串84136275;

    0 0 1 0 0 0 0 0//这是最后一个字符串的表示
    0 0 0 0 0 1 0 0
    0 0 0 1 0 0 0 0
    0 1 0 0 0 0 0 0
    0 0 0 0 0 0 0 1
    0 0 0 0 1 0 0 0
    0 0 0 0 0 0 1 0
    1 0 0 0 0 0 0 0


    最后一个皇后串表示在第一列第八排有一个皇后、第二排第四排有一个皇后、第三列第一排······第八列第五排有皇后;
    为什么要过别人为我安排的生活.
  • 相关阅读:
    我的开发环境配置经验
    C# WINFORM 打包数据库
    C#格式化数值结果表(格式化字符串)
    Excel如何固定表头,任意一行
    下载fiddler证书并设置信任
    fiddler展示serverIP方法
    fiddler抓包参数乱码的解决方法
    fiddler模拟发送get/post请求(也可做简单接口测试)
    Jenkins常用插件
    关于gitignore文件的创建与使用
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/6607566.html
Copyright © 2011-2022 走看看