zoukankan      html  css  js  c++  java
  • noi 1700 + 1756 八皇后问题 x

    1700:八皇后问题

    总时间限制: 
    10000ms
     
    内存限制: 
    65536kB
    描述
    在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。
    输入
    无输入。
    输出
    按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。
    样例输入
    
    
    样例输出
    No. 1
    1 0 0 0 0 0 0 0 
    0 0 0 0 0 0 1 0 
    0 0 0 0 1 0 0 0 
    0 0 0 0 0 0 0 1 
    0 1 0 0 0 0 0 0 
    0 0 0 1 0 0 0 0 
    0 0 0 0 0 1 0 0 
    0 0 1 0 0 0 0 0 
    No. 2
    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 0 
    0 0 0 0 0 0 0 1 
    0 1 0 0 0 0 0 0 
    0 0 0 0 1 0 0 0 
    0 0 1 0 0 0 0 0 
    No. 3
    1 0 0 0 0 0 0 0 
    0 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 1 
    0 0 1 0 0 0 0 0 
    0 0 0 0 0 0 1 0 
    0 0 0 1 0 0 0 0 
    0 1 0 0 0 0 0 0 
    0 0 0 0 1 0 0 0 
    No. 4
    1 0 0 0 0 0 0 0 
    0 0 0 0 1 0 0 0 
    0 0 0 0 0 0 0 1 
    0 0 0 0 0 1 0 0 
    0 0 1 0 0 0 0 0 
    0 0 0 0 0 0 1 0 
    0 1 0 0 0 0 0 0 
    0 0 0 1 0 0 0 0 
    No. 5
    0 0 0 0 0 1 0 0 
    1 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 0 0 0 0 1 
    0 0 1 0 0 0 0 0 
    0 0 0 0 0 0 1 0 
    0 0 0 1 0 0 0 0 
    No. 6
    0 0 0 1 0 0 0 0 
    1 0 0 0 0 0 0 0 
    0 0 0 0 1 0 0 0 
    0 0 0 0 0 0 0 1 
    0 1 0 0 0 0 0 0 
    0 0 0 0 0 0 1 0 
    0 0 1 0 0 0 0 0 
    0 0 0 0 0 1 0 0 
    No. 7
    0 0 0 0 1 0 0 0 
    1 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 1 
    0 0 0 1 0 0 0 0 
    0 1 0 0 0 0 0 0 
    0 0 0 0 0 0 1 0 
    0 0 1 0 0 0 0 0 
    0 0 0 0 0 1 0 0 
    No. 8
    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 0 1 0 0 0 
    0 0 0 0 0 0 0 1 
    0 1 0 0 0 0 0 0 
    0 0 0 1 0 0 0 0 
    0 0 0 0 0 1 0 0 
    No. 9
    0 0 0 0 1 0 0 0 
    1 0 0 0 0 0 0 0 
    0 0 0 1 0 0 0 0 
    0 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 1 
    0 1 0 0 0 0 0 0 
    0 0 0 0 0 0 1 0 
    0 0 1 0 0 0 0 0 
    ...以下省略
    提示
    此题可使用函数递归调用的方法求解。
    以下的代码真的真的6666
     1 #include<cstdio>
     2 #define s printf(
     3 #define h m[i][j]=x[j]=y[i+j]=z[i-j+10]=
     4 #define f(i) for(int i=0;i<8;i++)
     5 
     6 int m[9][9],c,k,l,x[9],y[9],z[50];
     7 
     8 int d(int i)
     9 {
    10     if(i>7)
    11     {
    12         ++c;
    13         s"No. %d
    ",c);
    14         f(k)
    15         {
    16             f(l)s"%d ",m[l][k]);
    17             s"
    ");
    18         }
    19     }
    20     f(j)
    21     {
    22         if(!x[j]&&!y[i+j]&&!z[i-j+10])
    23         {
    24             h 1;
    25             d(i+1);
    26             h 0;
    27         }
    28     }
    29 }
    30 
    31 int main()
    32 {
    33     d(0);
    34 }

    1756:八皇后

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述
    会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将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
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<iostream>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<string>
     7 #include<cmath>
     8 
     9 using namespace std;
    10 
    11 bool d[100]= {0},b[100]= {0},c[100]= {0}; //b为行;c,d为对角线,c和,d差
    12 int h=0,n,cs[99],a[100];
    13 
    14 int print() {
    15     h++;
    16     for(int j=1; j<=n; j++) {
    17         if(h==cs[j]) {
    18             j++;
    19             for(int i=1; i<=8; i++) {
    20                 cout<<a[i];
    21             }
    22             cout<<endl;
    23         }
    24     }
    25 }
    26 
    27 int search(int i) {
    28     int j;
    29     for(j=1; j<=8; j++) {
    30         if(!b[j]&&!c[i+j]&&!d[i-j+7]) {
    31             a[i]=j;
    32             b[j]=1;
    33             c[i+j]=1;
    34             d[i-j+7]=1;
    35             if(i==8) print();
    36             else search(i+1);
    37             b[j]=0;
    38             c[i+j]=0;
    39             d[i-j+7]=0;
    40         }
    41     }
    42 }
    43 
    44 int main() {
    45     cin>>n;
    46     for(int i=1; i<=n; i++) {
    47         cin>>cs[i];
    48     }
    49     search(1);//从第1个皇后开始放置
    50     return 0;
    51 }

    还有n皇后问题:http://www.cnblogs.com/zxqxwnngztxx/p/6612746.html

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    Orleans的深入
    Orleans的入门教程
    .net core 微服务通讯组件Orleans的使用与配置
    AddTransient、AddSingleton、AddScoped的区别
    近期做架构师的总结
    大数据分析的深度与假象
    SQL反模式-1
    学习总结---INNODB 事务并发
    Tomcat的error-page掩盖action实例化的exception
    A SQL to insert continuous values
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6758900.html
Copyright © 2011-2022 走看看