一、 问题介绍
输入:皇后的数目,例4
输出:第1行至第N行皇后对应的列号,例(2,4,1,3)
1. 采用递归策略实现N皇后问题,测试能够在短时间内找到解的最大N;
2. 采用宽度优先算法实现N皇后问题,测试能够在短时间内找到解的最大N;
3. 采用深度优先算法实现N皇后问题,测试能够在短时间内找到解的最大N。
4. 利用位运算算法实现N皇后问题,测试能够在短时间内找到解的最大N。
5. 采用爬山法实现N皇后问题,测试能够在短时间内找到解的最大N。
二、 程序设计与算法分析
(一) 采用递归算法的实现思路为:
Backtrack(Data)
Data:当前状态
回溯搜索算法 返回值:从当前状态到目标状态的路径(以规则表的形式表示)
或Fail。
1. If Term(Data) ReturnNil;
2. If Deadend(Data)Return Fail;
3. Rules:=Apprules(Data);
4. Loop: If Null(Rules)Return Fail;
5. R:=First(Rules);
6. Rules:=Tail(Rules);
7. RData:=Gen(R, Data);
8. Path:=Backtrack(RData);
9. If Path=Fail Go Loop;
10. Return Cons(R, Path);
(二) 一般图的搜索方法的实现思路:
1. G=G0 (G0=s),Open:=(s);
2. Closed:=( );
3. Loop: If Open=( )Then Exit(Fail);
4. n:=First(Open),Remove(n, Open), Add(n, Closed);
5. If Goal(n),ThenExit(Success);
6. Expand(n)→{mi}, G:=Add(mi, G);
7. 标记和修改指针: Add(mj,Open), 并标记mj到n的指针; 计算是否要修改mk、ml到n的指针; 计算是否要修改ml到其后继节点的指针;
8.对Open中的节点按某种原则重新排序;
9.Go Loop;
这是对于一般图搜索的普适算法。不同的图搜,例如宽度优先算法和深度优先算法的区别主要体现在该算法中的第8条原则,依据不同的原则对open表中的数据进行排序。其中深度优先的排序方式为每次将待扩展节点插入open表的头部,而宽度优先搜索每次将待扩展的节点放到open表的尾部。
也就是深度优先搜索方法:
1. G := G0(G0=s), Open:= (s), Closed := ( );
2. Loop: If Open = ( )Then Exit (Fail);
3. n := First(Open);
4. If Goal(n) Then Exit(Success);
5. Remove(n, Open),Add(n, Closed);
6. If Depth(n) ≥ Dm Go Loop;
7. Expand(n) →{mi}, G := Add(mi,G);
8. If 目标在{mi}中 ThenExit(Success);
9.&n

本文详细介绍了皇后问题的解决方法,包括递归、宽度优先、深度优先和位运算算法,并探讨了爬山法在解决皇后问题中的应用。通过算法分析,指出不同算法在解决规模上的优势和效率,如递归和深度优先适用于33规模,位运算适用于34规模,宽度优先适用于14规模,而爬山法则具有较高的效率。
最低0.47元/天 解锁文章
1734

被折叠的 条评论
为什么被折叠?



