码迷,mamicode.com
首页 > 其他好文 > 详细

皇后问题

时间:2014-08-03 17:52:45      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   2014   

 

递归回溯代码

 

bubuko.com,布布扣
#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
 
bubuko.com,布布扣
#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
 

 

bubuko.com,布布扣
#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

bubuko.com,布布扣
#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;
}

 

 

bubuko.com,布布扣bubuko.com,布布扣

皇后问题,布布扣,bubuko.com

皇后问题

标签:style   blog   http   color   os   io   for   2014   

原文地址:http://www.cnblogs.com/2014acm/p/3888544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!