• 八皇后问题


    八皇后问题:

    • 在8*8的国际象棋棋盘上摆放8个皇后,使其不能互相攻击
    • 即:任意两个皇后不能在同行同列或同斜线,问有多少种摆法?

    我的代码:(写了半天还很水。。。最重要的是感觉是写对了)

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #define N 8
     5 using namespace std;
     6 int Q[N+1],count=1;
     7 void printQ()
     8 {//cout<<"第"<<count++<<"种"<<endl;
     9     int i,j;
    10     for(i=1;i<=N;i++)
    11     {
    12         for(j=1;j<=N;j++)
    13         if(i==Q[j]) printf("%d ",i);
    14         else printf("+ ");
    15         printf("
    ");
    16     }printf("----------------
    ");
    17 }
    18 void queen8(int x)
    19 {
    20     int i,j;
    21     if(x>N) {printQ(); return ;}
    22     for(i=1;i<=N;i++)
    23     {
    24         if(!Q[i])
    25         {
    26             for(j=1;j<=N;j++)
    27             {
    28                 if(!Q[j]) continue;
    29                 if((i-j==x-Q[j])||(i-j==Q[j]-x) )break ;
    30             }
    31             if(j>N){Q[i]=x;queen8(x+1);Q[i]=0;}
    32         }
    33     }
    34 
    35 }
    36 int main()
    37 {
    38     //freopen("G://1.txt","w",stdout);
    39     memset(Q,0,sizeof(Q));
    40     queen8(1);
    41     return 0;
    42 }

     另一种课上PPT给的代码:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <cmath>
    #define N 8
    using namespace std;
    int Q[N+1],count=1;
    void printQ()
    {//cout<<"第"<<count++<<"种"<<endl;
        int i,j;
        for(i=1;i<=N;i++)
        {
            for(j=1;j<=N;j++)
            if(i==Q[j]) printf("%d ",i);
            else printf("+ ");
            printf("
    ");
        }printf("----------------
    ");
    }
    bool Bound(int k)
    {
        for(int i=1;i<k;i++)
        {
            if((fabs(k-i)==fabs(Q[k]-Q[i]))||(Q[i]==Q[k]))
            return false;
        }
        return true;
    }
    void Backtrack(int t)
    {
        if(t>N) printQ();
        else{
            for(int i=1;i<=8;i++){
                Q[t]=i;
                if(Bound(t)) Backtrack(t+1);
            }
        }
    }
    int main()
    {
        freopen("G://2.txt","w",stdout);
        memset(Q,0,sizeof(Q));
        Backtrack(1);
        return 0;
    }
    

      

  • 相关阅读:
    java线程池源码阅读
    websocketcometd源码阅读基于注解初始化(三)
    websocketcometd源码阅读与spring整合初始化(四)
    cometd源码阅读初始化(二)
    cometd源码阅读WebSocketTransport普通消息处理过程(八)
    websocketcometd源码阅读transport(五)
    一.安装软件
    GitHub一篇文章系列
    JavaJVM调优jstack找出最耗cpu的线程&定位问题代码
    Git总目录
  • 原文地址:https://www.cnblogs.com/pursuitofacm/p/5243423.html
Copyright © 2020-2023  润新知