8皇后问题
我怎样才能实现8/4皇后问题?我应该使用DFS/BFS,我认为DF会更好。 任何人都可以给出一些伪代码/指南吗?
How can i go about implemting 8/4 queens problem?Should i use DFS/BFS,I think DFs will be better.
Can any one give some pseudocode/guidlines?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用堆栈和回溯,最简单的方法是通过递归。
请参阅其他 SO 帖子:
C++ 中的 Dumb 8 Queens 问题
Use a stack and backtracking, easiest way is via recursion.
See these other SO posts:
Dumb 8 Queens problem in C++
我的解决方案有2个预定义的逻辑,行上只有一个皇后,列上只有一个皇后。
有一个长度为8的一维数组。所有数组值都设置0-7之一,但所有值都只使用一次(0-7值的排列)
arr[0]=5 值表示皇后位于第一行第 6 列
arr[1]=3 值表示皇后位于第二行第 4 列,
只需控制数组检查时的交叉违规值,无需检查行或行违规。排列和交叉违规函数满足您的所有需求(C++ STL 有排列函数,只需要交叉违规函数)
My solution have 2 pre-defined logics, there is only one queen at row, and there is only one queen at column.
There is an one-dimensional array that length is 8. All array value set one of the 0-7, but all values used exactly one time (permutation of values that 0-7)
arr[0]=5 value means queen at column 6 at first row
arr[1]=3 value means queen at column 4 at second row,
just control cross violation values on array check for, there is no need for check line or row violation. Permutation and cross violation functions all you need, (C++ STL has permutation functions, that just need to cross violation functions)
则它们可以互相攻击
|ik|=|jl| (对角线),| |表示绝对值
要使用回溯打印所有可能的展示位置:
void NQueens(k,n)
{
*参考 saurabh 学校
If queens are at (i,j) and (k,l) coordinates,then they can attack each other if
|i-k|=|j-l| (diagonally),| | denotes the absolute value
To print all possible placements using backtracking:
void NQueens(k,n)
{
*With reference from saurabh school
这是我使用回溯的实现。
改变N的值来得到不同的解。
它将打印给定数量的皇后的所有可用解决方案。
Here is my implementation using backtracking.
Change the value of N to get the different solutions.
It will print all the solutions available for given number of queens.