迷宫求解“穷举求解”的方法:从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止为了保证在任何位置上都能沿原路退回,需要用一个后进先出的结构来保存从入口到当前位置的路径。求迷宫中一条路径的基本思想:若当前位置可通,则纳入当前路径,并继续朝下一位置探索,即切换下一位置为当前位置,如此重复直至到达出口;若当前位置不可通,则应顺着“来向”退回到前一通道块,然后朝着除来向之外的其他方向继续探索;若该通道块的四周4个方块均不可通,则应从当前路径上删除该通道块。用栈S记录当前路径,则栈顶中存放的是当前路径上最后一个通道块。“纳入路径”的操作为当前位置入栈;“从当前路径上删除前一通道块”的操作为出栈11
11 迷宫求解 ⚫ “穷举求解”的方法:从入口出发,顺某一方向向前探 索,若能走通,则继续往前走;否则沿原路退回,换一 个方向再继续探索,直至所有可能的通路都探索到为止。 为了保证在任何位置上都能沿原路退回,需要用一个后 进先出的结构来保存从入口到当前位置的路径。 ⚫ 求迷宫中一条路径的基本思想:若当前位置可通,则纳 入当前路径,并继续朝下一位置探索,即切换下一位置 为当前位置,如此重复直至到达出口;若当前位置不可 通,则应顺着“来向”退回到前一通道块,然后朝着除 来向之外的其他方向继续探索;若该通道块的四周4个 方块均不可通,则应从当前路径上删除该通道块。 ⚫ 用栈S记录当前路径,则栈顶中存放的是当前路径上最 后一个通道块。“纳入路径”的操作为当前位置入栈; “从当前路径上删除前一通道块”的操作为出栈
迷宫求解设定当前位置的初值为入口位置:Do若当前位置可通,则【将当前位置入栈:若该位置为出口位置,则结束:否则切换当前位置的东邻方块为新的当前位置;1否则【若栈不空且栈顶位置尚有其他方向未经探索,则设定新的位置为沿顺时针方向旋转找到下一相邻块;;若栈不空且栈顶位置的四周均不可通,则(删去栈顶位置;若栈不空,则重新测试新的栈顶位置,直到找到一个可通的相邻块或出栈至栈空:71 while12
12 迷宫求解 设定当前位置的初值为入口位置; Do { 若当前位置可通, 则 { 将当前位置入栈; 若该位置为出口位置,则结束; 否则切换当前位置的东邻方块为新的当前位置; } 否则 { 若栈不空且栈顶位置尚有其他方向未经探索, 则设定新的位置为沿顺时针方向旋转找到下一相邻块;; 若栈不空且栈顶位置的四周均不可通, 则 { 删去栈顶位置; 若栈不空,则重新测试新的栈顶位置, 直到找到一个可通的相邻块或出栈至栈空; } } } while