• 八皇后问题


    描述

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

    输入:

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

    输出:

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

    输入样例1:

      2

      1

      92

    输出样例1:

      15863724

      84136275

    代码:

     1 #include<iostream>
     2 #include<algorithm> 
     3 #include<cstdio>
     4 bool b[100]={0},c[100]={0},d[100]={0};
     5 int a[100],s[93],k=0;
     6 int search(int);
     7 void print();
     8 using namespace std;
     9 int main()
    10 {
    11     int n,j;
    12     cin>>n;
    13     search(1);
    14     for(int i=1;i<=n;i++)
    15     {
    16         cin>>j;
    17         cout<<s[j]<<endl;
    18     }
    19     return 0;
    20 }
    21 int search(int i)
    22 {
    23     int j;
    24     for(int j=1;j<=8;j++)
    25     {
    26         if((! b[j])&&(! c[i+j])&&(! d[i-j+7]))
    27         {
    28             a[i]=j;
    29             b[j]=1;
    30             c[i+j]=1;
    31             d[i-j+7]=1;
    32             if(i==8) print();
    33             else search(i+1);
    34             b[j]=0;
    35             c[i+j]=0;
    36             d[i-j+7]=0;
    37         }
    38     }
    39 }
    40 void print()
    41 {
    42     int i,p=1;
    43     k++;
    44     for(i=8;i>=1;i--)
    45     {
    46         s[k]+=a[i]*p;
    47         p*=10;
    48     }
    49 }
  • 相关阅读:
    《从零开始学Swift》学习笔记(Day 45)——重写方法
    《从零开始学Swift》学习笔记(Day 44)——重写属性
    浅析Android中ndk-build支持的参数
    texstudio on ubuntu 12.04
    arm上的参数列表传递的分析(以android为例)
    编译错误
    native method与so中function的关联
    Java.lang.NoClassDefFoundError--找不到相应的类
    Sublime Text 3 文档
    JNI 函数注册与管理
  • 原文地址:https://www.cnblogs.com/cyk20081108/p/12944053.html
Copyright © 2020-2023  润新知