回溯算法实例一培训讲学
回溯法举例【动态演示】ppt实用资料

带上界函数。 回回回n回n回n回回回回n回====溯溯溯溯溯溯溯溯溯溯3333,,,,wwww法 法 法 法 法 法 法 法 法 法====解解解解解解解解解解[[[[1111旅旅00旅000006666-------,,,,11111111111行行行背背背背背背背5555售售售,,,,1111包包包包包包包5555货货货问问问问问问问]]]],,,,员员员pppp题题题题题题题====问问问[[[[44445555题题题,,,,22225555,,,,22225555]]]],,,,cccc====33330000
回溯法举例
回溯法解0-1背包问题
n=3,w=[16,15,15],p=[45,25,25],c=30
16<c
B 31>c
杀死
Hale Waihona Puke C31>cA
15<c E 30=c
D F
15<c
杀死
可行 可行
可行 可行
45 50 25 25
可行
0
回溯法解0-1背包问题
n=3,w=[16,15,15],p=[45,25,25],c=30 n=3,w=[16,15,15],p=[45,25,25],c=30
nnnn回nnn回nnnn===========溯溯33333333333,,,,,,,,,,,wwwwwwwwwww法 法===========解解[[[[[[[[[[[111111111110066666666666--,,,,,,,,,,,1111111111111背背55555555555,,,,,,,,,,,11111111111包包55555555555问问]]]]]]]]]]],,,,,,,,,,,ppppppppppp题题===========[[[[[[[[[[[4444444444455555555555,,,,,,,,,,,2222222222255555555555,,,,,,,,,,,2222222222255555555555]]]]]]]]]]],,,,,,,,,,,ccccccccccc===========33333333333杀300000000000 死1>c
算法设计与分析-第8章-回溯法PPT课件

(2)可能解由一个等长向量{x1, x2, …, xn}组成,其中 xi=1(1≤i≤n)表示物品i装入背包,xi=0表示物品i没有装入背包, 当n=3时,其解空间是:
{(0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 0, 0), (0, 1, 1), (1, 0, 1), (1, 1, 0), (1, 1, 1) }
4 34 2 2 3 4 3 4 13 1 4 24 12 12 3 3 12 1 5 7 10 12 15 17 21 23 26 28 31 33 37 39 42 44 47 49 53 55 58 60 63 65
解向量:由根结点到叶结点的路径所定义
图8.1.1-3 n=4的八皇后问题解空间树
1
1
0
2
1
0
6
9
1
0
10
13
不可行解
1
0
1
0
1
0
8
11
12
14
15
不可行解 价值=20 价值=55 价值=30 价值=25 价值=0
.
15
8.1.2 回溯法的设计思想
TSP问题搜索解空间的方法---应用目标函数剪枝
再如,对于n=4的TSP问题,其代价矩阵如图所示,
∞3 6 7 C= 12 ∞ 2 8
.
21
8.1.3 回溯法的求解过程
简言之:
1) 逐级扩展解向量 x1 ,x2 , … , xi-1
xi
2) 动态测试部分解
用 Bi (x1 , x2 ,… ,xi-1 ,xi) ---剪枝函数动态测试, 判定路径 x1 x2 … xi-1 xi 是否可行。
第5章回溯法PPT课件

二、回溯的一般描述
一旦某个j元组(x1,x2,…,xj)违反D中仅涉及 x1,x2,…,xj 的一个约束,就可以肯定,以(x1, x2,…,xj)为前缀的任何n元组
(x1,x2,…,xj,xj+1,…,xn)都不会是问题P 的解。
三、回溯的一般步骤
回溯法正是针对这类问题,利用这类问题的 上述性质而提出来的比枚举法效率更高的算 法。
由于这是第一次用计算机证明数学定理,所以哈肯 和阿佩尔的工作,不仅是解决了一个难题,而且从 根本上拓展了人们对“证明”的理解,引发了数学 家从数学及哲学方面对“证明”的思考。
实例—n皇后问题
在一个n×n的棋盘上放置n个国际象棋中 的皇后,要求所有的皇后之间都不形成攻 击。请你给出所有可能的排布方案数。
n
4
5
6
7
8
总数
2
10
4
40
92
n皇后问题
对于n皇后问题而言,我们很难找出很合适的方法 来快速的得到解,因此,我们只能采取最基本的枚 举法来求解。
但我们知道,在n×n的棋盘上放置n个棋子的所有
回溯算法(一)
什么是回溯
入口回溯
▪迷宫游戏
回溯
➢什么是回溯法
回溯
▪回溯法是一个既带
有系统性又带有跳跃
性的的搜索算法
回溯
▪回溯法是以深度优先的方式系统地搜索问题 出口 的解, 它适用于解一些组合数较大的问题。
回溯(Trackback)是什么?
为什么回溯?
怎样回溯?
What
Why
How
一、回溯的概念
解问题P的最朴素的方法就是枚举法,即对E 中的所有n元组逐一地检测其是否满足D的全 部约束,显然,其计算量是相当大的。
第5章 回溯法(1-例子)

n; // 作业数};
8
} //end Backtrack
旅行售货员问题
9
旅行售货员问题
解空间树 —— 排列树 剪枝函数:当搜索到第i 层,图G中存在从顶点1经i个 顶点到某其他顶点的一条路 径,且x[1:i]的费用和大于当前 已获得的最优值时,剪去该子 树的搜索。 算法效率:
O((n-1)!)*O(n) =O(n!)
cleft -= w[i];
b += p[i];
i++;
} // 装满背包
if (i <= n) b += p[i]/w[i] * cleft;
return b;
4
}
0-1背包问题
例:n=4,c=7,p=[9,10,7,4],w=[3,5,2,1] 解空间树如下:
物品 1 物品 2 物品 3 物品 4
class Flowshop { friend Flow(int**, int, int []);
f+=f2[i];
private:
if (f < bestf) {
void Backtrack(int i);
Swap(x[i], x[j]);
int **M, // 各作业所需的处理时间
Backtrack(i+1);
(2)将剩余的集装箱装上第二艘轮船。
将第一艘轮船尽可能装满等价于选取全体集装箱的一个子集,
使该子集中集装箱重量之和最接近c1。由此可知,装载问题等
价于以下特n殊的0-1背包问题。
max wi xi i 1
用回溯法设计解装载问题的O(2n)计
n
s.t. wi xi c1
算时间算法。
最大团问题-回溯法ppt课件

下图G中,子集{1,2}是G的大小为2的完全子图。这
个完全子图不是团,因为它被G的更大的完全子图{1,2,
5}包含。{1,2,5}是G的最大团。{1,4,5}和{2,3,5}
也是G的最大团。
1
2
3
4
5
01
问题描述
4
03 算法设计
无向图G的最大团问题可以看作是图G的顶点集V的子集选取问题。因此可 以用子集树表示问题的解空间。设当前扩展节点Z位于解空间树的第i层。在 进入左子树前,必须确认从顶点i到已入选的顶点集中每一个顶点都有边相连。 在进入右子树之前,必须确认还有足够多的可选择顶点使得算法有可能在右 子树中找到更大的团。
8
07 改进
•选择合适的搜索顺序,可以使得上界函数更有效的发挥作用。 例如在搜索之前可以将顶点按度从小到大排序。这在某种意义上 相当于给回溯法加入了启发性。 •定义Si={vi,vi+1,...,vn},依次求出Sn,Sn-1,...,S1的解。从 而得到一个更精确的上界函数,若cn+Si<=max则剪枝。同时注意 到:从Si+1到Si,如果找到一个更大的团,那么vi必然属于找到 的团,此时有Si=Si+1+1,否则Si=Si+1。因此只要max的值被更 新过,就可以确定已经找到最大值,不必再往下搜索了。
1
i=3 cn=2 bestn=0 2
i=4 tn=3
1
i=2 cn=0 bestn=3
2
2
i=3 cn=1 bestn=3
3
4
4
3
3
i=5 cn=2 bestn=0
4
4
算法回溯法PPT学习教案

回溯法的基本概念
▪问题的解可以用一个n元组(x1, … , xn)来表示,其 中的xi取自于某个有穷集Si , 并且这些解必须使得某 一限界函数P(x1, … , xn)取极值。 ▪不断地用修改过的限界函数Pi(x1,…,xn)去测试正在 构造的n元组的部分向量, 看是否可能导致最优解, 如 果不能, 就将可能要测试的mi+1 … mn个向量略去。 ▪回溯法的解需要满足一组综合的约束条件, 通常分 为: 显式约束和隐式约束
Q1
Q2
Q3
Q4
第9页/共58页
4-王后问题的解空间树
x1=1
2
x2=2 3
4
3
8
13
1
2
3
18
4 34 50
13 4
19
24
29 …
34 2 4 2 3 3 41 41 3
4 6 9 11 14 16 20 22 25 27 30 32 …
4 3 4 2 32 4 3 4 131
5 7 10 12 15 17 21 23 26 28 31 33 …
x1=
x1=
此结点2也被杀死; 再回溯到结
点1生成结点18, 路径变为(2)
▪结点18的儿子结点19
、结点24被杀死, 应回
溯
1
1
2
x2= 2
x2=
33
kil l x3=
1 2
x2= 4
8
13
x3=4x23=
2 18
x2= 1 x2=
19 3 24
kil kil
x3l=3
l
2
9 11 14 16
kil kil
第5章 回溯法(1-例子)
{ if ((count>half)||(t*(t-1)/2-count>half)) return; if (t>n) sum++;
-++-+ -
else for (int i=0;i<2;i++) { p[1][t]=i;
-+
count+=i;
for (int j=2;j<=t;j++) { p[j][t-j+1]=p[j-1][t-j+1]^p[j-1][t-j+2]; count+=p[j][t-j+1];
对n=4, 四后问题的两个布局
无效布局
有效布局
14
对n=5, 五后问题
……
15
对n=8, 八后问题有92个解之多
1
Q
2
Q
3
Q
4
Q
5
Q
6Q
7
Q
8
Q
1 2345678
1
Q
2
Q
3
Q
4
Q
5
Q
6
Q
7Q
8
Q
1 2345678
16
四后问题的解空间
每行只能放置一个皇后,因此用xi表示第i行皇后 放置在xi列。
void Queen::Backtrack(int t)
{
if (t>n) sum++;
else
for (int i=1;i<=n;i++) {
x[t]=i;
if (Place(t)) Backtrack(t+1);
回溯法讲义(新)
8
旅行售货员问题
某售货员要到若干城市去推销商品,下图显示了各城市之 间的路程,他要选定一条从驻地出发,经过每个城市一遍, 最后回到住地的路线,使总的路程最短。(假设售货员的 驻地在1) 30 1 2 路线图
5 6 3 10 4 20 4
上图是一个4顶点无向带权图。顶点序列1,2,4,3,1;1,3,2,4,1 和1,4,3,2,1是该图中3条不同的周游 路线。
4
2. 回溯法的步骤
1)定义一个解空间,它包含问题的解。 2)用适于搜索的方式组织该空间。 3)用深度优先法搜索该空间,利用限界函数避免移动到不可 能产生解的子空间。 常用的剪枝函数: 用约束函数在扩展结点处剪去不满足约束的子树; 用限界函数剪去得不到最优解的子树;
5
3. 解空间
19
回溯与分支限界
回溯法和分支限界法都是通过系统地搜索解空间树而求得 问题解的搜索算法。 在系统地检查解空间的过程中,抛弃那些不可能导致合法 解的候选解,从而使求解时间大大缩短。(与蛮干算法相 区别) 回溯法以深度优先的方式搜索解空间,而分支限界法以广 度优先或最小耗费(最大收益)的方式搜索解空间。 有关分支限界的详细内容下一章为大家讲解
print(“换行符”); }
26
2 回溯法应用-例5.2 马的遍历问题
【例8.4】马的遍历问题 在n*m的棋盘中,马只能走“日” 字。马从位置(x,y) 处出发,把棋盘的每一格都走一次,且只走一次。找出所 有路径。
27
2 回溯法应用-例5.2 马的遍历问题-问题分析
问题1:问题解的搜索空间?
13
回溯法求解
当i<n时,当前的扩展结点位于排列树的第i-1层。图G中 存在从顶点 x[i-1]到达顶点x[i]的边时,x[1:i]构成图G 中的一条路径,且当x[1:i]的费用小于当前最优值时算法 进入排列树的第i层;否则,则剪去相应的子树。算法中 用变量cc记录当前路径的费用。
[计算机软件及应用]第5章算法分析回溯法ppt课件
• template<typename Type>
• void Loading<Type>::Backtrack(int i) //搜索第i层结点
•{
Байду номын сангаас
• if(i>n) //到达叶结点
•{
•
if(cw>bestw)
•
bestw=cw;
•
return;
•}
• if(cw+w[i]<=c) //进入左子树,x[i]=1
•{
•
cw+=w[i];
•
Backtrack(i+1); //继续搜索下一层
•
cw-=w[i]; //退出左子树
•}
• Backtrack(i+1); //进入右子树,x[i]=0
•}
template<typename Type> Type MaxLoading(Type w[],Type c,int n) //前往最优载分
A
1
0
B
1
0
C
1
0
D
1
0
E
1
0
F
1
0
G
1
0
H
I
J
K
L
M
N
O
• template<typename Type> • class Loading •{ • template<typename T> • friend T MaxLoading(T [],T,int);
• private: • void Backtrack(int i); • int n; //集装箱数 • Type *w; //集装箱分量数组 • Type c; //第1艘轮船的载分量 • Type cw; //当前载分量 • Type bestw; //当前最优载分量 • };
第六讲-回溯法专题讲座
递归算法
NQueens2(int k) { extern int x[n]; x[k]=-1; while(1) { x[k]=x[k]+1; while((x[k]<n)&&(!Place(k)) x[k]=x[k]+1; if(x[k]<n) { if(k<n-1) NQueens2(k+1); else printf(x[0:n-1]); } else return; } }
6.2 回溯算法设计
一、解空间的树结构表示
例6.3 4皇后问题的解空间树结构。 皇后问题的解空间树结构。 皇后问题的解空间树结构
1
x1
1
2
4 2
18
3
34 50
x2
3
2
3
8 2 9 4 4
4
13 2 3 3 19
1
3
24 1 4
4
29 1 3 2 35
1
2
40 1 4
4
45 1 2 2 51
1
2
非递归算法
BackTracking1(int n) { int i=1; while(i>0) { for(xi∈Si ) if (Bi(x1,x2,…,xi)==TRUE) { if((x1,x2,…,xi)已抵达答案节点) printf(x1,x2,…,xi); else i=i+1; } i=i-1; } }
56 1 3
3
61 1 2
x3
3 4
4 6 3 7
4
4
3
11 14 16 20 22 25 27 30 32 36 38 41 43 46 48 52 54 57 59 62 64 2 3 2 4 3 4 1 3 1 4 2 4 1 2 1 3 2 3 1 2 1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回溯算法实例一【问题】填字游戏问题描述:在3×3个方格的方阵中要填入数字1到N(N≥10)内的某9个数字,每个方格填一个整数,使得所有相邻两个方格内的两个整数之和为质数。
试求出所有满足这个要求的各种数字填法。
可用试探发找到问题的解,即从第一个方格开始,为当前方格寻找一个合理的整数填入,并在当前位置正确填入后,为下一方格寻找可填入的合理整数。
如不能为当前方格找到一个合理的可填证书,就要回退到前一方格,调整前一方格的填入数。
当第九个方格也填入合理的整数后,就找到了一个解,将该解输出,并调整第九个的填入的整数,寻找下一个解。
为找到一个满足要求的9个数的填法,从还未填一个数开始,按某种顺序(如从小到大的顺序)每次在当前位置填入一个整数,然后检查当前填入的整数是否能满足要求。
在满足要求的情况下,继续用同样的方法为下一方格填入整数。
如果最近填入的整数不能满足要求,就改变填入的整数。
如对当前方格试尽所有可能的整数,都不能满足要求,就得回退到前一方格,并调整前一方格填入的整数。
如此重复执行扩展、检查或调整、检查,直到找到一个满足问题要求的解,将解输出。
回溯法找一个解的算法:{ int m=0,ok=1;int n=8;do{if (ok) 扩展;else 调整;ok=检查前m个整数填放的合理性;} while ((!ok||m!=n)&&(m!=0))if (m!=0) 输出解;else 输出无解报告;}如果程序要找全部解,则在将找到的解输出后,应继续调整最后位置上填放的整数,试图去找下一个解。
相应的算法如下:回溯法找全部解的算法:{ int m=0,ok=1;int n=8;do{if (ok){ if (m==n){ 输出解;调整;}else 扩展;}else 调整;ok=检查前m个整数填放的合理性;} while (m!=0);}为了确保程序能够终止,调整时必须保证曾被放弃过的填数序列不会再次实验,即要求按某种有许模型生成填数序列。
给解的候选者设定一个被检验的顺序,按这个顺序逐一形成候选者并检验。
从小到大或从大到小,都是可以采用的方法。
如扩展时,先在新位置填入整数1,调整时,找当前候选解中下一个还未被使用过的整数。
将上述扩展、调整、检验都编写成程序,细节见以下找全部解的程序。
【程序】# include <stdio.h>;# define N 12void write(int a[ ]){ int i,j;for (i=0;i<3;i++){ for (j=0;j<3;j++)printf(“%3d”,a[3*i+j]);printf(“\n”);}scanf(“%*c”);}int b[N+1];int a[10];int isprime(int m){ int i;int primes[ ]={2,3,5,7,11,17,19,23,29,-1};if (m==1||m%2=0) return 0;for (i=0;primes>;0;i++)if (m==primes) return 1;for (i=3;i*i<=m;){ if (m%i==0) return 0;i+=2;}return 1;}int checkmatrix[ ][3]={ {-1},{0,-1},{1,-1},{0,-1},{1,3,-1}, {2,4,-1},{3,-1},{4,6,-1},{5,7,-1}};int selectnum(int start){ int j;for (j=start;j<=N;j++)if (b[j]) return jreturn 0;}int check(int pos){ int i,j;if (pos<0) return 0;for (i=0;(j=checkmatrix[pos])>;=0;i++) if (!isprime(a[pos]+a[j])return 0;return 1;}int extend(int pos){ a[++pos]=selectnum(1);b[a][pos]]=0;return pos;}int change(int pos){ int j;while (pos>;=0&&(j=selectnum(a[pos]+1))==0) b[a[pos--]]=1;if (pos<0) return –1b[a[pos]]=1;a[pos]=j;b[j]=0;return pos;}void find(){ int ok=0,pos=0;a[pos]=1;b[a[pos]]=0;do {if (ok)if (pos==8){ write(a);pos=change(pos);}else pos=extend(pos);else pos=change(pos);ok=check(pos);} while (pos>;=0)}void main(){ int i;for (i=1;i<=N;i++)b=1;find();}/jh/23/437639.html五、回溯法回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。
当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。
如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。
在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。
扩大当前候选解的规模,以继续试探的过程称为向前试探。
1、回溯法的一般描述可用回溯法求解的问题P,通常要能表达为:对于已知的由n元组(x1,x2,…,xn)组成的一个状态空间E={(x1,x2,…,xn)∣xi∈Si ,i=1,2,…,n},给定关于n元组中的一个分量的一个约束集D,要求E中满足D 的全部约束条件的所有n元组。
其中Si是分量xi的定义域,且 |Si| 有限,i=1,2,…,n。
我们称E中满足D的全部约束条件的任一n元组为问题P的一个解。
解问题P的最朴素的方法就是枚举法,即对E中的所有n元组逐一地检测其是否满足D的全部约束,若满足,则为问题P的一个解。
但显然,其计算量是相当大的。
我们发现,对于许多问题,所给定的约束集D具有完备性,即i元组(x1,x2,…,xi)满足D中仅涉及到x1,x2,…,xi的所有约束意味着j(j<i)元组(x1,x2,…,xj)一定也满足D中仅涉及到x1,x2,…,xj的所有约束,i=1,2,…,n。
换句话说,只要存在0≤j≤n-1,使得(x1,x2,…,xj)违反D 中仅涉及到x1,x2,…,xj的约束之一,则以(x1,x2,…,xj)为前缀的任何n元组(x1,x2,…,xj,xj+1,…,xn)一定也违反D中仅涉及到x1,x2,…,xi的一个约束,n≥i>j。
因此,对于约束集D具有完备性的问题P,一旦检测断定某个j元组(x1,x2,…,xj)违反D中仅涉及x1,x2,…,xj的一个约束,就可以肯定,以(x1,x2,…,xj)为前缀的任何n元组(x1,x2,…,xj,xj+1,…,xn)都不会是问题P的解,因而就不必去搜索它们、检测它们。
回溯法正是针对这类问题,利用这类问题的上述性质而提出来的比枚举法效率更高的算法。
回溯法首先将问题P的n元组的状态空间E表示成一棵高为n的带权有序树T,把在E中求问题P的所有解转化为在T中搜索问题P的所有解。
树T类似于检索树,它可以这样构造:设Si中的元素可排成xi(1) ,xi(2) ,…,xi(mi-1) ,|Si| =mi,i=1,2,…,n。
从根开始,让T的第I层的每一个结点都有mi个儿子。
这mi个儿子到它们的双亲的边,按从左到右的次序,分别带权xi+1(1) ,xi+1(2) ,…,xi+1(mi) ,i=0,1,2,…,n-1。
照这种构造方式,E中的一个n元组(x1,x2,…,xn)对应于T中的一个叶子结点,T的根到这个叶子结点的路径上依次的n条边的权分别为x1,x2,…,xn,反之亦然。
另外,对于任意的0≤i≤n-1,E中n元组(x1,x2,…,xn)的一个前缀I元组(x1,x2,…,xi)对应于T中的一个非叶子结点,T的根到这个非叶子结点的路径上依次的I条边的权分别为x1,x2,…,xi,反之亦然。
特别,E中的任意一个n元组的空前缀(),对应于T 的根。
因而,在E中寻找问题P的一个解等价于在T中搜索一个叶子结点,要求从T的根到该叶子结点的路径上依次的n条边相应带的n个权x1,x2,…,xn满足约束集D的全部约束。
在T中搜索所要求的叶子结点,很自然的一种方式是从根出发,按深度优先的策略逐步深入,即依次搜索满足约束条件的前缀1元组(x1i)、前缀2元组(x1,x2)、…,前缀I元组(x1,x2,…,xi),…,直到i=n为止。
在回溯法中,上述引入的树被称为问题P的状态空间树;树T上任意一个结点被称为问题P的状态结点;树T上的任意一个叶子结点被称为问题P的一个解状态结点;树T上满足约束集D的全部约束的任意一个叶子结点被称为问题P的一个回答状态结点,它对应于问题P的一个解。
【问题】组合问题问题描述:找出从自然数1、2、……、n中任取r个数的所有组合。
例如n=5,r=3的所有组合为:(1)1、2、3 (2)1、2、4 (3)1、2、5(4)1、3、4 (5)1、3、5 (6)1、4、5(7)2、3、4 (8)2、3、5 (9)2、4、5(10)3、4、5则该问题的状态空间为:E={(x1,x2,x3)∣xi∈S ,i=1,2,3 } 其中:S={1,2,3,4,5}约束集为: x1<x2<x3显然该约束集具有完备性。
问题的状态空间树T:2、回溯法的方法对于具有完备约束集D的一般问题P及其相应的状态空间树T,利用T的层次结构和D的完备性,在T中搜索问题P的所有解的回溯法可以形象地描述为:从T的根出发,按深度优先的策略,系统地搜索以其为根的子树中可能包含着回答结点的所有状态结点,而跳过对肯定不含回答结点的所有子树的搜索,以提高搜索效率。
具体地说,当搜索按深度优先策略到达一个满足D中所有有关约束的状态结点时,即“激活”该状态结点,以便继续往深层搜索;否则跳过对以该状态结点为根的子树的搜索,而一边逐层地向该状态结点的祖先结点回溯,一边“杀死”其儿子结点已被搜索遍的祖先结点,直到遇到其儿子结点未被搜索遍的祖先结点,即转向其未被搜索的一个儿子结点继续搜索。
在搜索过程中,只要所激活的状态结点又满足终结条件,那么它就是回答结点,应该把它输出或保存。