8个皇后问题

我怎样才能实现8/4皇后问题?我应该使用DFS / BFS,我认为DF会更好。 任何人都可以给出一些伪代码/ guidlines吗?     
已邀请:
使用堆栈和回溯,最简单的方法是通过递归。 查看其他SO帖子: C ++中的Dumb 8 Queens问题     
DFS确实是解决方案,应该作为回溯实现。 请参阅此处以获取解决方案的说明。 如果您不理解链接中的任何描述,请询问。 祝一切顺利。     
我的解决方案有2个预定义的逻辑,行中只有一个皇后,列上只有一个皇后。 有一个长度为8的一维数组。所有数组值都设置为0-7之一,但所有值都使用了一次(值为0-7的排列) arr [0] = 5值表示第一行第6列的女王 arr [1] = 3值表示第二列第4列的女王, 只需控制数组检查中的交叉违规值,就不需要检查行或行违规。所有你需要的排列和交叉违规函数,(C ++ STL具有排列函数,只需要交叉违规函数)     
如果皇后处于(i,j)和(k,l)坐标,那么他们可以相互攻击 i = k(同一行) j = l(同一列) | I-K | = | J-升| (对角线),| |表示绝对值
bool place(k,i)
{
//returns true if the queen can be placed at k-th row and i-th column
//x[] is a global array with first (k-1) values set already.
//x[p]=q means a queen is at location (p,q)

for(j=1 to k-1)
{
if(x[j]==i)||(ABS(x[j]-i)==ABS(j-k))  //checking if another queen in same column or     diagonally
return false;
}
return true;
}
要使用回溯打印所有可能的展示位置: void NQueens(k,n)  {
for(i=1 to n)
{
if(place(k,i)) //checking if queen can be placed at (k,i)
{
x[k]=i;
if(k==n) then write (x[1:n]);  
else Nqueens(k+1,n);
 }
 }
}
*参考saurabh学校     

要回复问题请先登录注册