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;
    }

  • 相关阅读:
    iframe设置背景透明
    苹果新版QuickTime X启用新图标
    css命名规则
    视觉设计前瞻实用性研究(PNVD) 第二期
    Tab(选项卡)的产品设计原则及应用 [1]
    WiFi热点认证
    自画表格,微软报表,水晶报表初用初分析.
    Winform 打印类重温
    Winform 打印DataGrid View
    Winform 常用的.记住免得以后到处找.
  • 原文地址:https://www.cnblogs.com/2014acm/p/3888544.html
Copyright © 2011-2022 走看看