Transcript lab16.ppt
Lab16 程序设计B班 2007-12-27 Maze 迷宫问题 设计一个applet, 在8*8个cell的board上寻找一条由左 上角(0,0)到右下角(7,7)的path (不要求最短) board上的cell可以放置障碍mark, mark可以由用户点 击鼠标添加或移除 一条合法的path是由一组连续相邻(不包括对角)的cell 组成的, 须绕过所有的mark, 并且要求用序号把path 经过的cell给标出来. 如果maze无解, 给出” No path exists” 的提示 点击按钮ClearAll, 可以清楚Path和所有mark 进阶功能(不要求,有兴趣可以课后做): 如何使path不包含square形式的cell(不存在4个相邻的 cell) 如何找到Maze中的最短路径 New Mark随机生成mark(s), mark的数量由board右方 的选择按钮指定。如下图 提示: 可能用到的类: Maze board为8*8的cell对象二维数组 寻找path 对访问过的cell设置标记, 可以考虑递归 实现 Cell 作mark 实现MouseListener; Graphics对象的 drawLine方法 画path 可以为cell分配一个path中的序列号 Mark, Path… 提示: Cell 可以用面板实现, 使用2个布尔变量和一个路径 ID(可选,在Maze中设置亦可): marked 标志是否被mark Visited 是否被访问过(寻找path时防止重复) 画mark 获取cell大小: panel 的getsize().width, getsize().height, 用drawline画2个交叉斜线 Maze 递归调用Findpath(row, col) 设置当前row,col所指cell为访问过 Findpath(row-1, col) Findpath(row+1, col) Findpath(row, col-1) Findpath(row, col+1)