数据结构第六章第五节

数据结构第六章第五节

ID:46236785

大小:3.49 MB

页数:89页

时间:2019-11-22

数据结构第六章第五节_第1页
数据结构第六章第五节_第2页
数据结构第六章第五节_第3页
数据结构第六章第五节_第4页
数据结构第六章第五节_第5页
资源描述:

《数据结构第六章第五节》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、6.7回溯法和树的遍历回溯的一般描述回溯法的基本框架应用举例6.7.1回溯的一般描述回溯法(Backtracking)“通用的解题法”基本原理:以“深度优先”的方式系统地“搜索”一个问题的一组解或所有解适用场合适合于求解组合数较大的问题问题的解必须能用一个n元组表示X=(x1,x2,…,xn),xiSi,(i=1,2,…n)mi=

2、Si

3、,(i=1,2,…n)求出使得规范函数P(x1,x2,…,xn)取极大值(或极小值或满足规范函数的约束条件)的所有向量应用条件(1)xi0即Si={所有非负实数}(2)xi=0或xi=1即Si={0,1}(3)l

4、ixiui即Si={a,liaui}显式约束可以与所求解的问题的实例I有关,也可以无关。满足显示约束的所有元组确定问题的一个“可能的”解空间显式约束:限定每个x只能从一个给定的集合上取值隐式约束:规定I的解空间中那些实际上满足规范函数的元组。隐式约束描述了xi必须“彼此相关”的情况约束条件例八皇后问题(i+1,j+1)(i+1,j)(i+1,j-1)(i,j+1)(i,j)(i,j-1)(i-1,j+1)(i-1,j)(i-1,j-1)N皇后问题QQQQQQQQ1234567812345678八皇后问题X=(x1,x2,…,x8)(2)显式约

5、束条件:(1)问题解表达式:Si={1,2,3,4,5,6,7,8},1i8(3)隐式约束条件:(xixj)&&(abs(xi-xj)abs(i-j))1i,j8(4)解空间:888!X=(4,6,8,2,7,6,3,5)?x1=1x2=2x2=4x2=33443x2=1x2=4x2=334x1=2244223324341311413x2=1x2=4x2=224x1=31413424131x2=1x2=3x2=223x1=413123231214皇后问题的状态空间树11xx212xxxx12x3123xxxx1xxx2123xxx123x

6、x4x(1,1)(1,2)(1,3)(1,4)(2,1)(2,2)(2,3)(2,4)(2,1)(2,2)(2,3)(2,4)(3,1)(3,2)(3,3)(3,4)(3,1)(3,2)(3,3)(3,4)(4,1)(4,2)(4,3)(4,4)(4,1)(4,2)(4,3)(3,1)并查集的树表示intBACKTRACK(n){//这是对回溯法控制流程的抽象描述。每个解都在x[1..n]中生成,一个解一//经确定就立即印出。在x[1],…x[k]已选定的情况下,T(x[1],…,x[k-1])给出//x[k]所有可能的取值。限界函数B(x[1],…

7、x[k])判断哪些元素x[k]满足隐式约//束条件k=1;while(k>0){if还剩有未检验过的x[k],使得x[k]T(x[1],…,x[k])andB(x[1],…,x[k])==TRUE{if(x[1],…,x[k])是一条已抵达答案结点的路径print(x[1],…x[k]);elsek=k+1;//考虑下一个集合}//ifelsek=k-1;//回溯到先前的集合}//while}//BACKTRACK并查集的树表示voidRBACKTRACK(k){//这是对回溯法控制流程的抽象地递归描述。进入算法时,解//向量X[1..n]的前k-

8、1个分量x[1],…,x[k-1]已赋值for满足下式的每个x[k]x[k]T(x[1],…,x[k])andB(x[1],…,x[k])==TRUE{if(x[1],…,x[k])是一条已抵达答案结点的路径print(x[1],…,x[k]);elseRBACKTRACK(k+1);}//for}//BACKTRACK置行计数i=1;放置第一个棋子,将棋子位置压入堆栈;while(i<=4){i++;在i行的适当位置放置一个棋子,检查位置的合法性;if位置合法,then将棋子位置压入堆栈;else{while(栈不空){删除栈顶元素;i--;在第

9、i行重试下一个合法位置;if找到一个合法位置,then{将新位置压入堆栈;break;}}//while((栈不空))}//else}//while(i<=4)四皇后四皇后voidplace(inti,intn){//进入本函数时,在nxn棋盘前i-1行已放置了互不攻击的i-1个棋子//现从第i行起继续为后续棋子选择合适位置//当(i>n)时,求得一个合法布局,输出之if(i>n)输出棋盘的当前布局;//n为4时,即为4皇后问题elsefor(j=1;j<=n;++j){在第i行第j列放置一个棋子;if(当前布局合法)place(i+1,n);移走第

10、i行第j列的棋子;}}//place四皇后voidplace(inti,intn){//进入本函数时,在nx

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。