zoukankan      html  css  js  c++  java
  • 皇后问题

    递归回溯代码

    #include <iostream>
    using namespace std;
    
    
    int n,m, a[10];
    bool bz[3][10];
    
    
    void  DFS(int k)
    {   int i;
    if  (k==n)
        {   for ( i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for ( i=0; i<n; i++)
               if ( !bz[0][i] && !bz[1][k+i] && !bz[2][k-i+n] )               
               {    a[k]=i+1;
             bz[0][i]=bz[1][k+i]=bz[2][k-i+n]=1;
                DFS(k+1);
    bz[0][i]=bz[1][k+i]=bz[2][k-i+n]=0; 
               }    
    }
    
    
    int main()
    { cin>>n;
            DFS(0);
    return 0;
    }
    View Code
    #include <iostream>
    using namespace std;
     
    int n,m, a[10];
    bool bz[3][10];
     
    void  DFS(int k)
    {   int i;
    if  (k==n)
        {   for ( i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for ( i=0; i<n; i++)
               if ( !bz[0][i] && !bz[1][k+i] && !bz[2][k-i+n] )               
               {    a[k]=i+1;
             bz[0][i]=bz[1][k+i]=bz[2][k-i+n]=1;
                DFS(k+1);
    bz[0][i]=bz[1][k+i]=bz[2][k-i+n]=0; 
               }    
    }
     
    int main()
    { cin>>n;
            DFS(0);
    return 0;
    }
     
     
    递归代码1
     
    #include <iostream>
    using namespace std;
    
    
    int n,m, 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==n)
        {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for (int i=1; i<=n; i++)
                if ( ok(k,i) )  { a[k]=i;    DFS(k+1); }
    }
    
    
    int main()
    { cin>>n;
            DFS(0);
    return 0;
    }
    View Code
    #include <iostream>
    using namespace std;
     
    int n,m, 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==n)
        {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for (int i=1; i<=n; i++)
                if ( ok(k,i) )  { a[k]=i;    DFS(k+1); }
    }
     
    int main()
    { cin>>n;
            DFS(0);
    return 0;
    }
     
     
     
     
     
    递归代码2
     
    #include <iostream>
    using namespace std;
    
    
    int n,m, a[10];
    
    
    bool ok( int k,int i)
    {   for (int j = 0; j <k; j++)
            if (  a[j]==a[k]  ||  abs(a[j]-a[k])==abs(j-k) ) return false;
        return true;
    }
    
    
    void  DFS(int k)
    {   if  (k==n)
        {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for (int i=1; i<=n; i++)
            {    a[k]=i;
                 if ( ok(k,i) ) DFS(k+1);
            }
    }
    
    
    int main()
    {    cin>>n;
        DFS(0);
        return 0;
    }
    View Code
    #include <iostream>
    using namespace std;
     
    int n,m, a[10];
     
    bool ok( int k,int i)
    {   for (int j = 0; j <k; j++)
            if (  a[j]==a[k]  ||  abs(a[j]-a[k])==abs(j-k) ) return false;
        return true;
    }
     
    void  DFS(int k)
    {   if  (k==n)
        {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for (int i=1; i<=n; i++)
            {    a[k]=i;
                 if ( ok(k,i) ) DFS(k+1);
            }
    }
     
    int main()
    {    cin>>n;
        DFS(0);
        return 0;
    }




    递归代码3

    #include <iostream>
    using namespace std;
    
    
    int n,m, a[10];
    
    
    
    
    void  DFS(int k)
    {   int i,j,ok;
    if  (k==n)
        {   for ( i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for ( i=1; i<=n; i++)
            { ok=1;
                a[k]=i;
            for ( j = 0; j <k; j++)              
       if (  a[j]==a[k] || k-a[k]==j-a[j] || k+a[k]==j+a[j]  )              
                        {  ok=0;  break; }         
             if ( ok )   DFS(k+1); 
            }   
    }
    
    
    int main()
    { cin>>n;
           DFS(0);
    return 0;
    }View Code
    View Code
    #include <iostream>
    using namespace std;
     
    int n,m, a[10];
     
     
    void  DFS(int k)
    {   int i,j,ok;
    if  (k==n)
        {   for ( i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for ( i=1; i<=n; i++)
            { ok=1;
                a[k]=i;
            for ( j = 0; j <k; j++)              
       if (  a[j]==a[k] || k-a[k]==j-a[j] || k+a[k]==j+a[j]  )              
                        {  ok=0;  break; }         
             if ( ok )   DFS(k+1); 
            }   
    }
     
    int main()
    { cin>>n;
           DFS(0);
    return 0;
    }
     

    #include <iostream>
    using namespace std;
    int n,m, 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==n)
        {   for (int i=0; i<n; i++)     cout<<a[i]<<" ";
            cout<<endl;
        }
        else
            for (int i=1; i<=n; i++)
                if ( ok(k,i) )  { a[k]=i;    DFS(k+1); }
    }
    int main()
    { cin>>n;      DFS(0);
     return 0;
    }

  • 相关阅读:
    实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
    实验 2:Mininet 实验——拓扑的命令脚本生成
    软工第一次作业——自我介绍
    博客园美化
    实验 1:Mininet 源码安装和可视化拓扑工具
    软工实践个人总结
    结对编程之学术家族树
    软件工程实践结对编程作业(需求分析与原型设计)
    软件工程实践个人编程作业
    软件工程实践第一次个人作业
  • 原文地址:https://www.cnblogs.com/2014acm/p/3888544.html
Copyright © 2011-2022 走看看