zoukankan      html  css  js  c++  java
  • 八皇后问题(回溯_排列树)

    时限:1000ms 内存限制:10000K 总时限:3000ms

    描述:

    输出8皇后问题所有结果。

    输入:

    没有输入。

    输出:

    每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。

    输入样例:

    输出样例:

    输出的前几行:

    No 1:

    A.......

    ....A...

    .......A

    .....A..

    ..A.....

    ......A.

    .A......

    ...A....

    No 2:

    A.......

    .....A..

    .......A

    ..A.....

    ......A.

    ...A....

    .A......

    ....A...

    #include<stdio.h>
    #include<math.h>
    
    void NQueens(int m);
    bool canplace(int t);
    void print(); 
    #define N 8
    int Array[9]={0};//针对八皇后设的数组(Array[0]不用)
    int sum=0;
    
    int main()
    {
       NQueens(1);
       return 0;
    }
    void NQueens(int m)//m=1~8
    {
       if(m>N)
       { sum++;   print(); }
       else   
          for(int i=1;i<=N;i++)
          {
              Array[m]=i;
              if(canplace(m))
                 NQueens(m+1);
          }
    }
    void print()
    {
        int i,j;
        printf("NO%d:\n",sum);
        for(i=1;i<=N;i++)//每一行
        {
            for(j=1;j<=N;j++)
            {    if(Array[i]==j)
                    printf("A");
                else
                    printf("*");
            }
            printf("\n");
        }
    }
    bool canplace(int t)//第t行放上数后判断是否可行
    {
        for(int i=1;i<t;i++)
            if(Array[i]==Array[t] ||abs(t-i)==abs(Array[t]-Array[i]) )
                return false;
        return true;
    }
  • 相关阅读:
    [源码解析] 消息队列 Kombu 之 基本架构
    拿破仑,技术大牛晋级管理之后的困境
    Dyno-queues 分布式延迟队列 之 辅助功能
    Dyno-queues 分布式延迟队列 之 生产消费
    Dyno-queues 分布式延迟队列 之 基本功能
    DOM和BOM的区别
    Navigator对象
    expr命令
    ReactRouter的实现
    History对象
  • 原文地址:https://www.cnblogs.com/IThaitian/p/2581742.html
Copyright © 2011-2022 走看看