文档介绍:
1
第八章: 1、3、4
2
P215-1
修改算法 8.1(198页) 和 8.2(199页) ,使它们只求出问题的一个解而不是问题的全部解。
3
算法8.1
procedure BACKTRACK(n)
integer k,n; local X(1: n)
k ← 1
while k>0 do
if 还剩有没检验过的X(k)使得
X(k) ∈ T ( X(1), …,X(k-1)) and Bk ( X(1), …,X(k)) = true
then if ( X(1), …,X(k) ) 是一条抵达一答案节点的路径
then print ( X(1), …,X(k))
return
endif
k ←k + 1
else k ←k - 1 //回溯
endif
repeat
end BACKTRACK
给出X(k)的所有可能取值
满足隐式约束条件
4
算法6.2
procedure RBACKTRACK(k)
global n, X(1:n)
for 满足下式的每个X(k)
X(k) T ( X(1), …,X(k-1)) and Bk ( X(1), …,X(k)) = true
do
if ( X(1), …,X(k))是一条抵达一答案结点的路径
then print ( X(1), …,X(k))
stop
endif
call RBACKTRACK(k+1)
repeat
end RBACKTRACK
5
P196-3
重新定义过程 PLACE(k),使它的返回值或者是第 k 个皇后可以放置于其上的合法列号,或者是一个非法值,这样可以提高一些 NQUEENS 的效率,按以上策略重写这两个过程。
6
procedure PLACE(k) //判断X(k)的合法性,若不合法,令其指向下一合法位置,若下一个合法位置不存在,返回-1。
global X(1:k) ; integer i, k
i ← 1
while i
if X(i) = X(k) or ABS( X(i)X(k)) = ABS(i-k)
then X(k) ←X(k)+1 //找下一位置
i ← 1 //i从1起逐个检查X(k)的合法性
if X(k)>n then return (-1) endif
else i ←i + 1 // X(k)
内容来自淘豆网www.taodocs.com转载请标明出处.