- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树基本知识
作业(栈和队列) 给定一个由100个存储单元组成的初始为空的存储区域,利用这个存储区域顺序存储队列,一整数序列作为输入元素,整数n0表示把元素n添加到队列中;n=-1表示从队列中删去一个元素;n=0表示输入结束。请编写一个算法,实现上述操作,要求把队列处理成环形结构,并在发现异常情况时,立即打印错误信息。 作业(栈和队列) 假设一算术表达式中含有圆括号,方括号和花括号三种类型的符号,试写一个判别表达式中括号是否配对的算法,表达式以#表示结束。/yuluows/article/details/7657944 回溯法:一种不断试探且及时纠正错误的搜索方法。 回溯法思想:从入口出发,按某一方向向前探索,若能走通(未走过的),则到达新点,否则试探下一没有探索过的方向 ; 若所有的方向均没有通路,则沿原路返回前一位置,换下一个方向再继续试探,直到所有可能的通路都探索过,或找到一条通路,或无路可走又返回到入口处。 线性表综合应用——迷宫求解 如图表示的是一个8×8的迷宫。入口位置为(1,1),出口位置为(8,8) 表示迷宫的数据结构 迷宫定义: #define m 8 #define n 8 int maze [m+2][n+2] 每个点有4个方向可试探,如当前点的坐标(x,y),与其相邻的4个点的坐标都可根据与该点的相邻方位而得到。 试探顺序规定为:从正东沿顺时针方向进行。 move数组定义: typedef struct { int x,y } item ; item move[4] ; x:行坐标增量 y:列坐标增量 试探方向 x y 1 0 0 -1 -1 0 0 1 增量数组move (x, y) (x, y+1) (x-1, y) (x, y-1) (x+1, y) 当到达了某点而无路可走时需返回到前一点,再从前一点开始向下一个方向继续试探。因此,压入栈中的不仅是顺序到达的各点的坐标,而且还要有从前一点到达本点的方向。 栈的设计 栈中元素是一个由序号、位置、方向组成的三元组: typedef struct { int ord; //路径上的序号 int x, y; //坐标位置 int d ; // 方向 }datatype ; 栈的定义仍然为: SeqStack s ; 1、另外设置一个标志数组mark[m][n],它的所有元素都初始化为0,一旦到达了某一点 ( i , j )之后,使mark[i][j] 置1,下次再试探这个位置时就不能再走了 2、 当到达某点(i , j)后使maze[i][j] 置 -1,以便区别未到达过的点,同样也能起到防止走重复点的目的 如何防止重复到达某点,以避免发生死循环 1.栈初始化; 2.将入口点位置、序号及到达该点的方向(设为-1)入栈 3.while (栈不空) { 栈顶元素=>(ord , x, y, d) 出栈 ; 求出下一个要试探的方向d++ ; while (还有剩余试探方向时) { if (d方向可走) {( ord , x, y, d )入栈 ; 求新点位置(i, j)及序号ord ; 将新点(i, j)切换为当前点(x, y) ; if ( (i, j)= =出口 ) 结束 else 重置 d=0 ; } else d++ ; } } 迷宫求解算法思想 Status mazepath ( int maze[][], item move[4]) { SeqStack s ; datatype temp ; int x, y, d, i, j , e=0; temp.x=1; temp.y=1; temp.d=-1; temp.ord=e++; Push_SeqStack (s,temp); while (! Empty_SeqStack (s ) ) { Pop_SeqStack (s,&temp) ; x=temp.x ; y=temp.y ; d=temp.d+1 ; while (d4) { i=x+move[d].x ; j=y+move[d].y ;
文档评论(0)