从皇后问题到图搜索

一、  问题介绍

输入:皇后的数目,例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.   Add(mj, Open), 并标记mj到n的指针;


10.  Go Loop;

深度优先搜索特点:

l  若存在多个目标状态,一般不能保证找到最优解


l  当深度限制不合理时,可能找不到解,可以将算法改为可变深度限制


l  最坏情况时,搜索空间等同于穷举 


l  与回溯法的差别:图搜索 


l  是一个通用的与问题无关的方法 


 


宽度优先搜索方法的实现思路:

1.   G :=

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值