数据结构课程设计java求解迷宫回溯法A算法精品资料.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构课程设计java求解迷宫回溯法A算法精品资料.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计java求解迷宫回溯法A算法精品资料.docx(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法与数据结构 课程设计课题:求解迷宫通路的图形界面演示程序作者:吴昊 QQ:328035823目录1.题目及需求分析42.概要设计43.详细设计104.调试分析395.课程设计总结421题目及需求分析1.1题目编制一个求解迷宫通路的图形界面演示程序。1.2需求分析1. 输入一个任意大小的迷宫,任设起点、终点、障碍,用栈求出一条走出迷宫的路径,并显示在屏幕上;2. 根据用户界面提示,用键盘输入,Home键设置迷宫起点,End键设终点,上下左右箭头键移动,Enter键添加墙,Del键删除墙,完成后按F9键演示,演示完毕后可F5刷新题图,重新对地图的起点、终点、障碍进行设置,Esc键退出;3. 本
2、程序要求至少得出一条成功的通路,也可求得全部路径。此外,也可尝试保存或载入测试文件(此功能不做强行要求)。4. 当未输入起点时,消息显示“Error: You must set the START.”;未输入终点时,显示“Error: You must set the END.”;找到路径时,屏幕显示足迹,并在消息框出现Path found,否则消去足迹,显示Path not found。5. 用户可以通过界面上提供的菜单选项,选择“帮助”查看操作说明。6. (算法选优)用户可以通过界面上提供的菜单选项,选择“A*算法求最短路径”演示求解迷宫最短路径。2.概要设计根据需求分析的用户界面的设计要
3、求,考虑到我们在Java课程中学习过GUI设计,对Java的GUI的比较熟悉,所以我们用Java语言来开发本项目。在设计求解迷宫的程序时,要求编写8个Java源文件:Dialog.java、Maze.java、MazeGUI.java、Position.java、Rollback.java、stack.java、Astar.java和Aposition.java。该程序除了上述6个Java源文件所给出的类以外,还需呀Java系统提供的一些重要的类,如java.awt包中的容器类、画图类、事件类及监听器接口、javax.swing包中的各种轻量组件类和java.lang包中线程类等。2.1 UM
4、L类图程序的所用到的一些重要的类以及之间的关联关系如图2-1所示。图2-1 UML类图2.2 Dialog.java(主类)Dialog.java(主类)是JDialog类的一个子类。该类负责创建提示用户输入迷宫大小的对话框,通过用户输入的参数来确定所要创建的迷宫图形界面的窗口的大小。该类含有main方法,程序从该类开始执行。Begin类的成员变量有JTextField、JButton、JFrame。Begin类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.3 Maze.javaMaze类创建的对象是MazeGUI类和Rollback类最重要的成员之一,代表迷宫。该类负责接收在迷宫窗
5、口所设置起点、终点、障碍的位置参数来绘制迷宫图像并存储迷宫结构的信息。该类的主要成员变量有3种类型的对象:Position、Image以及存放整型数的二维数组。Maze类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.4 MazeGUI.javaMazeGUI类是Frame类的一个子类,创建的对象是Rollback类最重要的成员之一。该类负责创建迷宫图形窗口界面,方便用户在界面上设置起点、终点、障碍等并展现求解迷宫的过程。该类的主要成员变量有4种类型的对象:Maze、Rollback、Position和Thread。该类还包含一个内部类SolveThread,该内部类实现了runnab
6、le接口。MazeGUI类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.5 Position.java(图形界面坐标的存储结构)Position类创建的对象是Maze类、MazeGUI类和Rollback类最重要的成员之一。该类负责在Maze类、MazeGUI类和Rollback类之间传递消息,其对象存有当前位置的坐标信息。该类包含两个整型的成员变量x和y,记录当前位置在迷宫图形界面的横、纵坐标。Position类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.6 Stack.java(数据类型结构)为了体现算法与数据结构的课程特点,我们并没有用Java系统类库中java.U
7、til.Stack类,而是编写了一个通用的Stack存储结构。Stack类创建的对象是Rollback类的最重要的成员之一。该类负责保存在求解迷宫过程中所走过的路径信息。该类包含一个内部类Node,定义了栈中存储的节点元素的类型。另外还含有一个整型成员变量n和一个Node类型的成员变量top,分别记录栈中元素的个数以及栈顶元素的信息。而Node类定义的是栈中节点的类型,包含当前节点的信息info(Object类型)和以及栈中下一个元素的引用next(相当在C语言中的指针)。Stack类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.7 Rollback.java(核心算法回溯算法)Ro
8、llback类创建的对象是是MazeGUI类最重要的成员之一。该类负责根据Maze类中的迷宫数组的信息采用回溯算法,控制并绘制人物在迷宫图形界面窗口中的位置。该类的主要成员变量有4种类型的对象:Maze、MazeGUI、Position和Stack。Rollback类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.8 Astar.java(核心算法A*算法)Astar类创建的对象是是MazeGUI类最重要的成员之一。该类负责根据Maze类中的迷宫数组的信息采用A*算法,找到起点到终点的最短路径并打印出来。该类的主要成员变量有4种类型的对象:Maze、APosition、Stack和Li
9、nkedList。Astar类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.9 Aposition(A*算法的存储结构)Aposition类是Position类的派生类,APosition类创建的对象是Astar类、MazeGUI类和Rollback类最重要的成员之一。该类负责在Astar类、MazeGUI类和Rollback类之间传递消息,其对象存有当前位置的坐标信息、A*算法的评估函数值、开关标记和父节点等。APosition类的主要成员和成员方法的作用将在后面的详细设计中阐述。2.9事件跟踪图2.9.1用户启动迷宫图形界面图2-2 用户启动迷宫图形界面2.9.2用户设置迷宫参数
10、图2-3 用户设置迷宫参数2.9.3回溯法求解迷宫图2-4 回溯法求解迷宫3.详细设计3.1 工程文件视图3.2 Dialog.java(主类)3.2.1 效果图Dialog创建的对话框效果如图1所示。图1 Dialog创建的对话框对象3.2.2 UML图Dialog类是javax.swing包中JDialog的一个子类,标明该类的主要成员变量和方法的UML图如图2所示。图2 Dialog类的UMl图以下是UML图中有关数据和方法的详细说明。1) 成员变量l tf1、tf2是JTextField类创建的文本框。用来接收用户输入的设置迷宫的大小参数,即行和列的数目。当用户没有输入时,tf1、tf
11、2的默认文本内容为10。l b是JButton类创建的按钮,名字为“生成迷宫”。b被放置在对话框的右下角。b还为自己注册了ActionEvent的事件监听器。当点击按钮时,根据tf1、tf2的文本内容创建一个MazeGUI的对象,生成迷宫图形界面窗口。2)成员方法l Dialog()是构造方法,负责完成对话框的初始化操作。初始化操作包括:将内容为 列数: 的JLabel对象、内容为 列数: 的JLabel对象、tf1、tf2、b添加到对话框中,并设置对话框的布局,设置背景颜色,设置对话框的标题为“课程设计-求解迷宫”。另外还为对话框注册了WindowEvent的事件监听器。l main(Str
12、ing srgd)方法是程序运行的入口方法。3.2.3 代码(Dialog.java)package maze;import java.awt.*;import java.awt.event.*;import javax.swing.*;/* * 启动窗口 * */SuppressWarnings(serial)public class Dialog extends JDialog private JTextField tf1=new JTextField(10,10);private JTextField tf2=new JTextField(10,10);private JButton b
13、=new JButton(生成迷宫);public static void main(String srgd)tryThread.sleep(300);catch(Exception e)e.printStackTrace();new Dialog();public Dialog()setTitle(课程设计-求解迷宫);setLayout(new BorderLayout();JPanel p=new JPanel(new GridLayout(4,1);FlowLayout flowLayout=new FlowLayout();flowLayout.setAlignment(FlowLa
14、yout.LEFT);flowLayout.setHgap(10);FlowLayout flowLayout1=new FlowLayout();flowLayout1.setAlignment(FlowLayout.RIGHT);JPanel p1=new JPanel(flowLayout);JPanel p2=new JPanel(flowLayout);JPanel p3=new JPanel();JPanel p4=new JPanel();JPanel p5=new JPanel(flowLayout1);p1.add(new JLabel( 行数: );p1.add(tf1);
15、p2.add(new JLabel( 列数: );p2.add(tf2);p1.setBackground(new Color(226,244,255);p2.setBackground(new Color(226,244,255);p3.setBackground(new Color(226,244,255);p4.setBackground(new Color(226,244,255);p.add(p3);p.add(p1);p.add(p2);p.add(p4);p5.add(b);p5.setBackground(new Color(196,227,248);add(new JLabe
16、l(new ImageIcon(maze.jpg),BorderLayout.NORTH);add(p,BorderLayout.CENTER);add(p5,BorderLayout.SOUTH);setSize(345, 250);setLocation(400, 100);setVisible(true);b.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)new MazeGUI(Integer.parseInt(tf1.getText(), Integer.parseInt(
17、tf2.getText();setVisible(false););addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););3.3 Maze.java3.3.1 效果图Maze类绘制的墙、通路、路径、起点和终点的效果图如图3所示。图3 墙、通路、路径、起点和终点3.3.2 UML图Maze类创建的对象是MazeGUI类和Rollback类最重要的成员之一,代表迷宫。标明Maze类的主要成员变量、成员方法的UMl图如图4所示。图4 Maze类的UML图以下是UML图
18、中有关数据和方法的详细说明。1) 成员变量l mazeMap是int类型的二维数组,数组的元素的值表示迷宫对应位置的内容。若元素的值为0表示迷宫对应位置可通过,即为通路;若元素的值为1表示迷宫对应位置为墙;若元素的值为2表示迷宫对应位置为已经走过的足迹;若元素的值为3,表示迷宫对应位置是从栈中弹出的点,并且不能再次通过;若元素的值为4,表示迷宫对应位置为起点,保证起点不可通过。l begin和end是Position类创建的对象,其存储了起点和终点在迷宫图形界面上的坐标信息。l drawPos是Position类创建的对象,在迷宫图形界面上表现为一个方框,起到定位的作用,其存储了在设置起点、终
19、点、障碍在迷宫图形界面的位置时当前的坐标信息。l wallPic、roadPic、goPic、beginPic和endPic是Image类创建的对象,其内容分别为墙、通路、路径、起点和终点的图片。l row和col是int类型的变量,其值分别表示迷宫数组的行数和列数。2) 成员方法l Maze(int row,int col)是Maze类的构造方法,通过调用setMaze方法来创建maze对象,其参数row,col是从MazeGUI类中传来的参数。l setMaze(int row,int col)方法,maze对象可调用该方法完成迷宫数组的初始化操作:创建指定行数和列数的迷宫数组,将迷宫图形
20、界面外围位置对应迷宫数组的元素的值设为1,将其余元素的值设为0。l isPass(Position p)方法,maze对象可调用该方法判断传入的参数p点周围的四个方向是否能通过,并返回一个整型数。根据p点坐标,确定该点在迷宫数组中的元素位置,然后再根据该位置四个方向上相邻位置元素的值判断该p点周围的四个方向是否能通过。若元素的值为0表示可以通过。对于返回值,若返回-1,表示p点四周没有通路(包括从栈中弹出的点);若返回0,表示p点东方向有通路;若返回1,表示p点南方向有通路;若返回2,表示p点西方向有通路;若返回3,表示p点北方向有通路。l mark(Position p,int m)方法,m
21、aze对象可调用该方法将传入的参数p点在迷宫数组的对应位置的元素设为m。l draw(Graphics g)方法,maze对象可调用该方法根据迷宫数组元素的值来绘制墙、通路、路径图像和用于在迷宫图形界面定位的方框,此外该方法还根据begin和end中存储的坐标信息来绘制对应位置的起点和终点图像。l setBegin(int x,int y)和setEnd(int x,int y)方法,maze对象可调用该方法根据传入的参数x,y来创建Position类的对象begin和end。3.3.3 代码(Maze.java)package maze;import java.awt.*;import ja
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计java求解迷宫,回溯法,A算法 精品资料 数据结构 课程设计 java 求解 迷宫 回溯 算法 精品 资料
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内