收藏 分享(赏)

数据结构(java)走迷宫.doc

上传人:精品资料 文档编号:8454983 上传时间:2019-06-28 格式:DOC 页数:25 大小:175KB
下载 相关 举报
数据结构(java)走迷宫.doc_第1页
第1页 / 共25页
数据结构(java)走迷宫.doc_第2页
第2页 / 共25页
数据结构(java)走迷宫.doc_第3页
第3页 / 共25页
数据结构(java)走迷宫.doc_第4页
第4页 / 共25页
数据结构(java)走迷宫.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、0华东交大理工学院课程设计(论文)任务书电信 分 院 2009 电子商务 专 业 (1) 班 一、课程设计(论文)题目 走 迷 宫 二、课程设计(论文)工作自 2011 年 6 月 20 日起至 2011 年 6 月 30 日止。三、课程设计(论文) 地点: 机房 四、课程设计(论文)内容要求:1本课程设计的目的(1)熟练掌握数据结构的基本算法,提高算法设计与分析能力 (2)基本掌握面向对象设计基本思路和方法;(3)利用所学的基本知识和技能,解决简单的程序设计问题;(4)提高学生的科技论文写作能力。 2课程设计的任务及要求1)基本要求:(1)课程设计前必须根据课程设计题目认真准备实验源程序及调

2、试时所需的数据; (2)要求采用简明、严格的问题描述,设计求解算法;(3)数据结构选用得当,程序结构合理;(4)程序简明易懂,多运用输出提示,程序运行正确; (5)对设计进行总结和讨论。2)课程设计论文编写要求(1)要按照书稿的规格打印撰写课设论文(2)论文包括目录、正文、总结和体会、参考文献、附录等(3)正文中要有问题描述、设计求解算法、算法的实现、调试分析(调试时出现的主要问题:编译语法错误及修改,重点是运行逻辑问题修改和调整)(4)课设论文装订按学校的统一要求完成3)课设考核: 从以下几方面来考查:(1)出勤情况; (2)设计任务的难易程度及饱满程度;(3)课设任务完成情况; (4)动手

3、调试能力;(5)论文撰写的原理分析、设计思路以及论述的层次性、条理性、格式的规范性。 4)参考文献:1 王元珍,韩宗芬.IBM-PC 宏汇编语言程序设计(第二版).华中理工大学出版社.2 叶核亚数据结构(Java 版) (第 2 版) 电子工业出版社3 耿祥义、张跃平 Java 基础教程(第 2 版) 清华大学出版社4 刘小晶 数据结构(Java 语言描述) 清华大学出版社5)课程设计进度安排内容 天数 地点构思及收集资料 3 图书馆程序设计与调试 4 计算机房撰写论文 3 图书馆6)选择课程设计题目具体要求:走迷宫:1、用递归算法实现,以栈和队列作为辅助结构,2、并设计图形用户界面提供迷宫大

4、小、入口及出口位置和初始状态等,3、演示走迷宫的过程和结果。学生签名: 22011 年 6 月 30 日课程设计(论文)评审意见(1)任务难易及完成情况 :优( ) 、良( ) 、中( ) 、一般( ) 、差( ) ; (2)调试能力评价 :优( ) 、良( ) 、中( ) 、一般( ) 、差( ) ; (3)论文撰写水平评价 :优( ) 、良( ) 、中( ) 、一般( ) 、差( ) ;(4)论文格式规范性评价 :优( ) 、良( ) 、中( ) 、一般( ) 、差( ) ;(5)考勤 :优( ) 、良( ) 、中( ) 、一般( ) 、差( ) ;总评成绩:评阅人: 李广丽 职称: 讲师

5、 2011 年 7 月 2 日Comment chenhl1: 各个章节使用标题格式,然后利用菜单插入-引用-索引和目录 自动生成目录叶建平走迷宫0目 录绪论 .1第一章 概要 设计 .2第二章 详 细设计 .3第三章 调试分 析与截图 4总结和体会 .5参考文献 .6叶建平走迷宫0绪 论1.编制一个求解迷宫通路的图形界面演示程序2.设置一个可以任意设置障碍,删除障碍的迷宫。并求出迷宫的一条通路3.根据用户界面提示,可以使用事先设定的迷宫也可以使用自定义的迷宫。在着迷宫同路的过程中,需将查找的过程演示出来,并且在最后时,需要标记出查找成功的一条路径。4.本程序只求出一条成功的通路,因受图形界面

6、限制,不能保存或载入测试文件(此功能可在 Maze_text 中实现) 。5)当路径掩盖起点或终点时,消息显示“Is there any way to go ?tell me”;找到路径时,屏幕显示足迹,并在消息框出现,“bingo find it,so easy”华东交大理工学院课程设计报告1第一章 概要设计为实现上述程序功能,主要使用的 JAVA AWT 和 JAVA SWING 包import java.awt.*;import javax.swing.*;import hartech.ui.*;3. 本程序包含四个模块:1) 主程序模块:import java.awt.*;import

7、 javax.swing.*;import hartech.ui.*;/* Title: maze Global class* Description: * Date: 2006-08-31 */public class Main / _reset 变量用于 reset 时用static int rows = 12, cols = 14;static int speed_reset = 50, speed = speed_reset;static JToggleButton buttons;static Walking walking;static boolean brick, brick_r

8、eset = true, true, true, true, true, false, true, true, true, true,true, true, true, true, , true, false, false, false, true, false, true, true, true, true,false, false, false, true, ,叶建平走迷宫2 true, false, true, false, true, false, false, false, false, true,true, false, true, true, , true, false, tru

9、e, false, true, false, true, true, true, false,true, false, true, false, , true, true, true, false, false, false, true, false, true, false,true, false, true, true, , true, false, true, true, true, true, true, false, true, false,true, false, false, true, , true, false, true, true, true, true, true, f

10、alse, true, false,true, false, true, true, , true, false, false, false, false, false, true, true, true, false,true, false, true, false, , true, false, true, true, true, false, false, false, false, false,true, false, true, true, , true, false, true, false, true, false, true, true, true, true,true, fa

11、lse, false, true, , true, false, true, false, true, false, true, false, false, false,false, false, true, true, , true, true, true, false, true, true, true, true, true, true,true, false, true, true, ;static JFrame jFrame;static UI ui;public static void main(String args) /启动新线程,创建一个窗口javax.swing.Swing

12、Utilities.invokeLater(new Runnable() public void run() J.setLookAndFeel(“Metal“);jFrame = new JFrame(“is there any way to go? Maze - “);/建立一个 Swing 窗体jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/单击关闭图标后,程序退出并关闭/ add华东交大理工学院课程设计报告3Main.ui = new UI();jFrame.add(ui, BorderLayout.CENTER);jFram

13、e.setSize(700, 400);J.goCenter(jFrame);Main.drawButtons();Main.reset();jFrame.setVisible(true););/ 用于重置到软件开始public static void reset() if (walking != null) walking.timer.stop();clean();brick = copyBoolean(brick_reset);speed = speed_reset;UI.jSlider.setValue(speed);setBricks();/ 用于清楚已标记上的数字public sta

14、tic void clean() if (walking != null) walking.timer.stop();for (int i = 0; i Title: mazes MainUI * Description: * Date: 2006-08-31 */public class UI extends JPanel private static final long serialVersionUID = 5924032800440919028L;static JPanel jPanel_state, jPanel_map, jPanel_control;static JLabel j

15、Label_state;static JButton jButton_move, jButton_clean, jButton_blank, jButton_reset;static JSlider jSlider;/添加面板,向面板里添加各个组件public UI() super(new BorderLayout();/ addadd(jPanel_control(), BorderLayout.SOUTH);/布局管理器,从左到右设置按钮public static JPanel jPanel_control() 叶建平走迷宫8jLabel_state = new JLabel(“ Move

16、 now?“);jLabel_state.setHorizontalTextPosition(JLabel.LEFT);/将Move now标签 添加/在面板的左下角jSlider = new JSlider(JSlider.HORIZONTAL, 5, 400, Main.speed);/建立一个水平方向的滑竿jSlider.setPreferredSize(new Dimension(5, 5);/滑杆的大小jSlider.setBackground(new Color(208, 220, 255);jSlider.addChangeListener(new ChangeListener(

17、) public void stateChanged(ChangeEvent e) Main.speed = (JSlider) e.getSource().getValue();/处理changeEvent 时间,当用户滑动杆时速度会改变);/为 各个按 钮 添加监视器jButton_move = new JButton(“Move!“);jButton_move.addActionListener(new ActionListener_button();jButton_move.setActionCommand(“move“);jButton_clean = new JButton(“Cl

18、ean“);jButton_clean.addActionListener(new ActionListener_button();jButton_clean.setActionCommand(“clean“);jButton_blank = new JButton(“Blank“);jButton_blank.addActionListener(new ActionListener_button();jButton_blank.setActionCommand(“blank“);jButton_reset = new JButton(“Reset“);jButton_reset.addAct

19、ionListener(new ActionListener_button();jButton_reset.setActionCommand(“reset“);jPanel_control = new JPanel();/ Option: X_AXIS Y_AXIS LINE_AXIS PAGE_AXIS华东交大理工学院课程设计报告9jPanel_control.setLayout(new BoxLayout(jPanel_control, BoxLayout.X_AXIS);/jPanel_control = new JPanel(new FlowLayout(FlowLayout.RIGH

20、T);jPanel_control.setBackground(new Color(208, 220, 255);jPanel_control.add(jLabel_state);jPanel_control.add(Box.createHorizontalGlue();/从左到右设置按钮jPanel_control.add(jSlider);jPanel_control.add(jButton_move);jPanel_control.add(jButton_clean);jPanel_control.add(jButton_blank);jPanel_control.add(jButton

21、_reset);return jPanel_control;/监视器接口static class ActionListener_button implements ActionListener public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(“move“) Main.move(); else if (e.getActionCommand().equals(“clean“) Main.clean(); else if (e.getActionCommand().equals(“blank“) M

22、ain.blank(); else if (e.getActionCommand().equals(“reset“) Main.reset();2Applete 模块package hartech.kids.maze;import java.awt.BorderLayout;import java.awt.Color;叶建平走迷宫10import javax.swing.*;public class Applet extends JApplet private static final long serialVersionUID = -5507838717556718924L;public v

23、oid init() JPanel jPanel = new JPanel(new BorderLayout();jPanel.setBorder(BorderFactory.createTitledBorder(“is there any way to go? Maze - “);jPanel.setBackground(Color.WHITE);Main.ui = new UI();/ addjPanel.add(Main.ui);add(jPanel, BorderLayout.CENTER);setSize(700, 400);Main.drawButtons();Main.reset

24、();setVisible(true);3.Walking 模块package hartech.kids.maze;import hartech.ds.Stack;import java.awt.*;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import javax.swing.Timer;/* * Tite: 迷 宫问题* 华东交大理工学院课程设计报告11* * * Description: 以一个mxn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。* 设计一个程序,对任意设定的迷宫,求

25、出一条从入口到出口的通路,或得出没有通路的结论。* * 下面用递归实现,实际上就是用了图深度优先遍历 走过的格子直接标记为障碍 line 76: 入 栈、入递归、出 栈,为了保持现场,类似于 Practice_2_3public class Walking private int rows;private int cols;private Dimension goal;SuppressWarnings(“unused“)private Dimension begin;/ false 为障碍或已走 过private boolean map;private Stack stack, stack_h

26、asWalk, stack_route;private boolean hasFound = false;private int count = 1;Timer timer = new Timer(Main.speed, new ActionListener_Timer();/ 初始化, 输 入地图 NxMpublic Walking(boolean map) this(map, new Dimension(0, 0), new Dimension(map.length - 1,map0.length - 1);/ 初始化,可自定 义 起始位置、终点位置public Walking(boole

27、an map, Dimension begin, Dimension goal) 叶建平走迷宫12rows = map.length;cols = map0.length;this.map = Main.copyBoolean(map);this.goal = goal;this.begin = begin;stack = new Stack();stack_hasWalk = new Stack();stack_route = new Stack();spider(begin.width, begin.height);printWalking();/ 根据stack_hasWalk、stac

28、k_route 演示已经的路和正确的路private void printWalking() stack_hasWalk.reverse();timer.setDelay(Main.speed);timer.start();/ 用于 timer中激发的事件,演示慢慢走路class ActionListener_Timer implements ActionListener public void actionPerformed(ActionEvent e) Dimension d;/ 走完了if (stack_hasWalk.isEmpty() / 标记正确路 线while (!stack_r

29、oute.isEmpty() d = (Dimension) stack_route.pop();Main.buttonsd.widthd.height.setForeground(new Color(204, 52, 103);if (!hasFound) UI.jLabel_state.setText(“ is there any way to go ? tell me !“); else Main.buttonsMain.rows - 1Main.cols - 1.setText(“);Main.buttons00.setForeground(new Color(204, 52, 103

30、);Main.buttonsMain.rows - 1Main.cols - 1.setForeground(new Color(204, 52, 103);华东交大理工学院课程设计报告13UI.jLabel_state.setText(“ Bingo ! i find it ! so easy.“);/ 停止该 定时器timer.stop();/ 慢慢走中。 。 。else d = (Dimension) stack_hasWalk.pop();Main.buttonsd.widthd.height.setText(String.valueOf(count+);private void sp

31、ider(int row, int col) / 本蜘蛛停止探测,原因:要探测区域出界 或为障碍 或已探测过 或其它蜘蛛已找到目标if (row rows - 1 | col cols - 1| !maprowcol | hasFound) return;/ 找到了else if (goal.width = row stack_route = (Stack) stack.clone();/ 向四个方向探 测 ,顺时钟else / 标记已走过maprowcol = false;stack_hasWalk.push(new Dimension(row, col);/ 右stack.push(new

32、 Dimension(row, col + 1);spider(row, col + 1);stack.pop();/ 下stack.push(new Dimension(row + 1, col);叶建平走迷宫14spider(row + 1, col);stack.pop();/ 左stack.push(new Dimension(row, col - 1);spider(row, col - 1);stack.pop();/ 上stack.push(new Dimension(row - 1, col);spider(row - 1, col);/ * 递归回来后出栈,可维持栈的原来状态

33、,就像没进入递归一样,然后进行下面方向探测stack.pop();华东交大理工学院课程设计报告15第三章 调试分析与截图1、 调试分析:在设计走迷宫算法的过程中,我主要是利用递归求解和入栈,出栈来解决的。从起点开始出发,每次都首先使自身节点右边的节点入栈,当遇到障碍物时,使下方节点入栈,又遇到障碍物时使左方节点入栈,再使上方节点入栈,依次类推。走过的节点也算作障碍物,知道找到一条通路。再将通路节点一次出栈,并将字体颜色设置为红色。经过调试分析,本程序能够完成需求分析的各项需求。2、 截图:本程序的运行环境为 JAVA进入演示程序后即显示图形用户界面:3. 单击“Move!”按钮即可开始走迷宫。

34、迷宫运行后如图叶建平走迷宫16红色数字部分为其中一条通路。4. 单击“Blank”按钮后可重新设置迷宫如图5. 点击“Clean”按钮可消除搜寻迷宫通路留下的痕迹,点击“Move”可重新搜寻迷宫通路6. 点击“Reset”可复位,即显示出原先的迷宫。7. 进度条可控制搜寻迷宫通路过程的速度。华东交大理工学院课程设计报告17总结和体会本次数据结构课程设计,我设计的是迷宫通路求解。主要使用了 JAVA AWT 包和 JAVA SWING 包,刚开始学的时候主要接触的都是 JAVA AWT,通过这次学习让我能够更加系统的自学了 JAVA SWING 包中的一些组件及其构造方法。在求解迷宫算法的设计中,我算法的核心思想就是递归和入栈出栈。由于一开始设计的失误导致,迷宫通路的求解一直不能正确的运行,在经过反复调试后,经实践证明其可以实现查找通路的功能叶建平走迷宫18参考文献1 王元珍,韩宗芬.IBM-PC 宏汇编语言程序设计(第二版).华中理工大学出版社.2 叶核亚数据结构(Java 版) (第 2 版) 电子工业出版社3 耿祥义、张跃平 Java 基础教程(第 2 版) 清华大学出版社4 刘小晶 数据结构(Java 语言描述) 清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报