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

    Description

    会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。

    如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 

    对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。

    已经知道8皇后问题一共有92组解(即92个不同的皇后串)。 给出一个数b,要求输出第b个串。

    串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。

    Input

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

    Output

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

    Sample Input

    2
    1
    92
    

    Sample Output

    15863724
    84136275
    
    #include <iostream>
    #include <cmath>
    using namespace std;
    int a[10],m;
    int ans[100][10];
    void dfs(int k)
    {
        int i,j,x,y,flag;
        if(k==8)
        {    for(i=0;i<k;i++) ans[m][i]=a[i];
            m++;
        }
        else 
        {    for(i=1;i<=8;i++)
            {   flag=1;
                for(j=0;j<k;j++)
                    if(k==j||i==a[j]||abs(j-k)==abs(a[j]-i)) flag=0;
                if(flag)
                {
                    a[k]=i; dfs(k+1);
                }            
            }
        }
    }
    int main(int argc, char *argv[])
    {
        int n,i,j,t;
        m=1;
        dfs(0);
        cin>>t;
        while(t--)
        {    cin>>n;
            for(i=0;i<8;i++) cout<<ans[n][i];
            cout<<endl;
        }
        return 0;
    }
    View Code




    #include <iostream>
    #include <cmath>
    using namespace std;
    int a[10],m;
    int ans[100][10];
    void dfs(int k)
    {
     int i,j,x,y,flag;
     if(k==8)
     { for(i=0;i<k;i++) ans[m][i]=a[i];
      m++;
     }
     else
     { for(i=1;i<=8;i++)
      {   flag=1;
       for(j=0;j<k;j++)
        if(k==j||i==a[j]||abs(j-k)==abs(a[j]-i)) flag=0;
       if(flag)
       {
        a[k]=i; dfs(k+1);
       }   
      }
     }
    }
    int main(int argc, char *argv[])
    {
     int n,i,j,t;
     m=1;
     dfs(0);
     cin>>t;
     while(t--)
     { cin>>n;
      for(i=0;i<8;i++) cout<<ans[n][i];
      cout<<endl;
     }
     return 0;
    }












    #include <iostream>
    #include <cmath>
    using namespace std;
    int m,n,a[10],s,xx;
    void  DFS(int n)
    {    int i,k,ok;
    if(n==8) {s++; if(s==xx)  {for(i=0;i<7;i++) cout<<a[i];}}
        else
        {
            for(i=1;i<=8;i++)
            {    ok=1;
                for(k=0;k<n;k++)
                    if(i==a[k]||(abs(n-k)==abs(i-a[k]))) ok=0 ;
                    if(ok){ a[n]=i; DFS(n+1);}
            }
        }
      
    }
    int main()
    {      
        int i,k,x1,y1;
        cin>>n;
        while(n--)
        {s=0;
        cin>>xx;
        DFS(0);
        }
    }
    View Code

    #include <iostream>
    #include <cmath>
    using namespace std;
    int m,n,a[10],s,xx;
    void DFS(int n)
    { int i,k,ok;
    if(n==8) {s++; if(s==xx) {for(i=0;i<7;i++) cout<<a[i];}}
    else
    {
    for(i=1;i<=8;i++)
    { ok=1;
    for(k=0;k<n;k++)
    if(i==a[k]||(abs(n-k)==abs(i-a[k]))) ok=0 ;
    if(ok){ a[n]=i; DFS(n+1);}
    }
    }

    }
    int main()
    {
    int i,k,x1,y1;
    cin>>n;
    while(n--)
    {s=0;
    cin>>xx;
    DFS(0);
    }
    }

















    #include <iostream>
    #include <cmath>
    using namespace std;
    int m,n,a[10],s,xx;
    void  DFS(int n)
    {    int i,k,ok;
    if(n==8) {s++; if(s==xx) {for(i=0;i<7;i++) cout<<a[i]; cout<<a[7]<<endl; xx=0;} }
        else
        {
            for(i=1;i<=8;i++)
            {    ok=1;
                for(k=0;k<n;k++)
                    if(i==a[k]||(abs(n-k)==abs(i-a[k]))) ok=0 ;
                    if(ok){ a[n]=i; DFS(n+1);}
            }
        }
      
    }
    int main()
    {      
        int i,k,x1,y1;
        cin>>n;
        while(n--)
        {s=0;
        cin>>xx;
        DFS(0);
        }
    }
        
    View Code


    #include <iostream>
    #include <cmath>
    using namespace std;
    int m,n,a[10],s,xx;
    void  DFS(int n)
    {    int i,k,ok;
    if(n==8) {s++; if(s==xx) {for(i=0;i<7;i++) cout<<a[i]; cout<<a[7]<<endl; xx=0;}
    }
     else
     {
      for(i=1;i<=8;i++)
      {    ok=1;
       for(k=0;k<n;k++)
        if(i==a[k]||(abs(n-k)==abs(i-a[k]))) ok=0 ;
        if(ok){ a[n]=i; DFS(n+1);}
      }
     }
     
    }
    int main()
    {     
     int i,k,x1,y1;
     cin>>n;
     while(n--)
     {s=0;
     cin>>xx;
     DFS(0);
     }
    }
       




    #include<iostream>
    #include<algorithm>
    using namespace std;
    int dp[100][10],total = 1,a[10];
    bool ok( int k,int i)
    {  for (int j = 0; j < k; j++)              
          if (  a[j]== i  ||  abs(a[j]-i)==abs(j-k) )              
             return false;         
       return true;
    }
    void  dfs(int k)
    {   if  (k==8)
        {   for (int i=0; i< 8; i++) 
            {
                dp[total][i] = a[i];
            
            }
          
            total++;
        }
        else
            for (int i=1; i<=8; i++)
                if ( ok(k,i) ) 
                { a[k]=i;    dfs(k+1); }
    }
    
    int main()
    {
        int t,n;
        dfs(0);
        cin>>t;
        while(cin>>n)
        {
            int i;
            for(i = 0; i < 8; i++)
                cout<<dp[n][i];
            cout<<endl;
        }
        return 0;   
    }
    View Code

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int dp[100][10],total = 1,a[10];
    bool ok( int k,int i)
    {  for (int j = 0; j < k; j++)             
          if (  a[j]== i  ||  abs(a[j]-i)==abs(j-k) )             
             return false;        
       return true;
    }
    void  dfs(int k)
    {   if  (k==8)
        {   for (int i=0; i< 8; i++)
      {
       dp[total][i] = a[i];
      
      }
         
      total++;
        }
        else
            for (int i=1; i<=8; i++)
                if ( ok(k,i) )
       { a[k]=i;    dfs(k+1); }
    }

    int main()
    {
        int t,n;
     dfs(0);
     cin>>t;
     while(cin>>n)
     {
      int i;
      for(i = 0; i < 8; i++)
       cout<<dp[n][i];
      cout<<endl;
     }
        return 0;  
    }



  • 相关阅读:
    内存溢出OutOfMemory
    系统问题定位
    final域的内存语义
    volatile内存语义
    锁的内存语义
    happens-before
    python 安装brew(国内的自动安装)
    【Mac】点击dmg文件后无反应,解决方案
    Mac----xmind 8 下载与破解方法
    面试中可向HR 提的问题总结?
  • 原文地址:https://www.cnblogs.com/2014acm/p/3888292.html
Copyright © 2011-2022 走看看