八皇后问题——紫书(刘汝佳)

解题思路:任意两个皇后不能出现在同行同列及同对角线,可以直接考虑每一行放一个皇后,依次往下进行。

1      
    1  
       
       

第1行的皇后放在0,1列都会和第0行的皇后攻击,所以直接到了第2列, 当第0和1行这么放置皇后时,我们发现下一行无论放在哪一列皇后都会相互攻击,所以此路不通,第1行的i要移动到下一个列。

 

 

 

 

1

 

     
      1
  1    
       

 

现在我们开始放第2行,放在其他3列都会与前面的皇后攻击,因此只能放在第1列,可是这样就会发现第3行无论放在哪里都不行,这时候我们要讲第0行的皇后移动到后一列,这个过程就叫做回溯。

 

 

 

  1    
      1
1      
    1  

 

这种情况是我们遇到的第一种可以放下的情况,此时cur==k,所以代码中的tot++;

后面的情况我就不列了,也可以依此进行类推。 

 

 

代码如下:

#include

using namespace std;
int a[10];
int n;
int tot;
int k;

void dfs(int cur)
{
    int ok;
    if(cur==k)
        {tot++;
        }
        else
            for(int i=0;i>n;
    for(k=1;k<11;k++)
    {
    tot=0;
    dfs(0);
    b[k]=tot;
    }
    cout<

 

你可能感兴趣的:(紫书,搜索)