数据结构(Java版)(第3版)叶核亚 答案之用队列编迷宫(部分1)
JAVA程序设计实用教程 (第3版) 叶核亚 习题答案 所有答案1 12章

Java 源程序文件经编译后生成字节码文件,若是 application 应用程序,则将字节码文件 交由 Java 解释器解释执行,最后在 windows 操作系统上运行。若是 applet 应用程序,则将 字节码文件嵌入超文本文件并下载到 web 浏览器上,最后由 windows 操作系统中的 Java 虚 拟机运行。
int i=1,n=10,s=0; for(i=1,i<=n,i++);
s+=i; System.out.pointln(“Sum=1+……+”+n+”=”+s); 有错误,正确的如下
int i=1,n=10,s=0; for(i=1,i<=n,i++)
s+=i; System.out.pointln(“Sum=1+……+”+n+”=”+s);
8.作为一个软件开发人员,应该具备那些基础知识用以开发 windows 应用程序? 【答】略
第2章
1.标示符和关键字在定义和使用方面有何区别? 【答】定义方面:标示符是用户定义的、以字母开头的字母数字序列,关键字是由 Java 语 言定义的、具有特定含义的英文单词。
使用方面:标示符用于命名变量、常量、类、对象等元素,每一个关键字都有特定的含 义,不能被赋予别的含义。
11.输出以下数字的形式; (1) 0 0 0 0
011 1 012 2 012 3 〖解答〗采用二重循环的程序如下。
public class Phalanx {
public static void main(String args[]) {
数据结构课程设计java求解迷宫,回溯法,A算法

算法与数据结构课程设计课题:求解迷宫通路的图形界面演示程序作者:***QQ:328035823目录1.题目及需求分析 (4)2.概要设计 (4)3.详细设计 (10)4.调试分析 (39)5.课程设计总结 (42)1.题目及需求分析1.1题目编制一个求解迷宫通路的图形界面演示程序。
1.2需求分析1.输入一个任意大小的迷宫,任设起点、终点、障碍,用栈求出一条走出迷宫的路径,并显示在屏幕上;2.根据用户界面提示,用键盘输入,Home键设置迷宫起点,End键设终点,上下左右箭头键移动,Enter键添加墙,Del键删除墙,完成后按F9键演示,演示完毕后可F5刷新题图,重新对地图的起点、终点、障碍进行设置,Esc键退出;3.本程序要求至少得出一条成功的通路,也可求得全部路径。
此外,也可尝试保存或载入测试文件(此功能不做强行要求)。
4.当未输入起点时,消息显示“Error: You must set the START.”;未输入终点时,显示“Error: You must set the END.”;找到路径时,屏幕显示足迹,并在消息框出现Path found,否则消去足迹,显示Path not found。
5.用户可以通过界面上提供的菜单选项,选择“帮助”查看操作说明。
6.(算法选优)用户可以通过界面上提供的菜单选项,选择“A*算法求最短路径”演示求解迷宫最短路径。
2.概要设计根据需求分析的用户界面的设计要求,考虑到我们在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包中的各种轻量组件类和ng包中线程类等。
数据结构课程设计迷宫算法的实现java

数据结构课程设计走迷宫学号:200908204136姓名:熊军日期:6月16日一、题目说明.分别用以下算法实现。
并设计图形用户界面提供迷宫大小、入口及出口位置和初始状态等,演示走迷宫的过程和结果。
1.递归算法。
2.使用栈作为辅助结构。
3.使用队列作为辅助结构。
二、总体设计方案以及细节设计为实现上述程序功能,主要使用的JA V A AWT和JA V A SWING包import java.awt.*;import javax.swing.*;import hartech.ui.*;3. 本程序包含四个模块:1)主程序模块:package mg;import java.awt.*;import javax.swing.*;/*** <p>Title: maze Global class</p>** <p>Description: </p>** <p>Date: 2006-08-31 </p>*/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_reset = {{ 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, },{ true, false, true, false, true, false, false, false, false, true,true, false, true, true, },{ true, false, true, 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, false, 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, false, 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.SwingUtilities.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);//单击关闭图标后,程序退出并关闭// addMain.ui = new UI();jFrame.add(ui, BorderLayout.CENTER);jFrame.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 static void clean() {if (walking != null) {walking.timer.stop();}for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j].setText("");//清除按钮的数字,设置名字为空buttons[i][j].setForeground(null);}}UI.jLabel_state.setText(" Move now?");}// 去掉全部砖public static void blank() {if (walking != null) {walking.timer.stop();}for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j].setText("");buttons[i][j].setForeground(null);buttons[i][j].setSelected(true);}}UI.jLabel_state.setText(" Move now?");}// 重画按钮图,根据rows、colspublic static JPanel drawButtons() {buttons = new JToggleButton[rows][cols];UI.jPanel_map = new JPanel(new GridLayout(rows, cols));for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j] = new JToggleButton();UI.jPanel_map.add(buttons[i][j]);}}Main.ui.add(UI.jPanel_map, BorderLayout.CENTER);Main.ui.setVisible(true);return UI.jPanel_map;}// 根据brick[][]设置按钮障碍public static void setBricks() {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j].setSelected(brick[i][j]);}}}// 根据现在按钮情况设置brick[][]数组,用于move()内前面public static void readBricks() {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {brick[i][j] = buttons[i][j].isSelected();}}}// 开始走public static void move() {if (walking != null) {walking.timer.stop();}clean();readBricks();//readToFile();walking = new Walking(brick);}/**// 用于把绘制好地图数据写入文件public static void readToFile() {String out = "";for (int i = 0; i < rows; i++) {out += "{";for (int j = 0; j < cols; j++) {if (brick[i][j]) {out += "true,";}else {out += "false,";}}out += "},\r\n";}hartech.JFile.stringToFile(out, "E:/dest.txt");}*/// 复制二维数组public static boolean[][] copyBoolean(boolean[][] in) { int row = in.length, col = in[0].length;boolean[][] out = new boolean[row][col];for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {out[i][j] = in[i][j];}}return out;}}import java.awt.*;import javax.swing.*;import hartech.ui.*;/*** <p>Title: maze Global class</p>** <p>Description: </p>** <p>Date: 2006-08-31 </p>*/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_reset = {{ 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, },{ true, false, true, false, true, false, false, false, false, true,true, false, true, true, },{ true, false, true, 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, false, 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, false, 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.SwingUtilities.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);//单击关闭图标后,程序退出并关闭// addMain.ui = new UI();jFrame.add(ui, BorderLayout.CENTER);jFrame.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 static void clean() {if (walking != null) {walking.timer.stop();}for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j].setText("");//清除按钮的数字,设置名字为空buttons[i][j].setForeground(null);}}UI.jLabel_state.setText(" Move now?");}// 去掉全部砖public static void blank() {if (walking != null) {walking.timer.stop();}for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j].setText("");buttons[i][j].setForeground(null);buttons[i][j].setSelected(true);}}UI.jLabel_state.setText(" Move now?");}// 重画按钮图,根据rows、colspublic static JPanel drawButtons() {buttons = new JToggleButton[rows][cols];UI.jPanel_map = new JPanel(new GridLayout(rows, cols));for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j] = new JToggleButton();UI.jPanel_map.add(buttons[i][j]);}}Main.ui.add(UI.jPanel_map, BorderLayout.CENTER);Main.ui.setVisible(true);return UI.jPanel_map;}// 根据brick[][]设置按钮障碍public static void setBricks() {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {buttons[i][j].setSelected(brick[i][j]);}}}// 根据现在按钮情况设置brick[][]数组,用于move()内前面public static void readBricks() {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {brick[i][j] = buttons[i][j].isSelected();}}}// 开始走public static void move() {if (walking != null) {walking.timer.stop();}clean();readBricks();//readToFile();walking = new Walking(brick);}/**// 用于把绘制好地图数据写入文件public static void readToFile() {String out = "";for (int i = 0; i < rows; i++) {out += "{";for (int j = 0; j < cols; j++) {if (brick[i][j]) {out += "true,";}else {out += "false,";}}out += "},\r\n";}hartech.JFile.stringToFile(out, "E:/dest.txt");}*/// 复制二维数组public static boolean[][] copyBoolean(boolean[][] in) { int row = in.length, col = in[0].length;boolean[][] out = new boolean[row][col];for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {out[i][j] = in[i][j];}}return out;}}2) UI模块——实现整个控制面板内组件的布局管理;3)Walking模块——实现走迷宫的算法;4)Applete模块——设置控制面板。
(完整版)数据结构课后习题答案(可编辑修改word版)

第1 章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,… },字母字符数据对象是集合C={‘A’,‘B’,… ,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
答案:例如有一张学生基本信息表,包括学生的学号、姓名、性别、籍贯、专业等。
每个学生基本信息记录对应一个数据元素,学生记录按顺序号排列,形成了学生基本信息记录的线性序列。
数据结构(Java版)习题解答

AI N D E X练习题答案第一章练习题答案(a) n+(n–1)+(n–2)+…+2+1=2)1(+ n n (b) n+(n–1)+(n–2)+…+2+1=2)1(+nnf(n)≦c.g(n) →f(n)=O(g(n))(a) f(n)=100n+9c=101, g(n)=n, n0=10得知f(n)=O(n)(b) f(n)=1000n2+100n–8c=2000, g(n)= n2, n0=1得知f(n)=O(n2)(c) f(n)=5*2n+9 n2+2c=10, n0=5得知f(n)=O(2n)f(n)≧c g(n) →f(n)=Ω(g(n)) (a) f(n)=3n+1c=2, n0=1, g(n)=n得知f(n)=Ω(n)(b) f(n)=100n2+4n+5c=10, n0=1, g(n)= n2得知f(n)=Ω(n2)(c) f(n)=8*2n+8n+16c=8, n0=1, g(n)= 2n得知f(n)=Ω(n2)c1.g(n)≦f(n)≦c2.g(n) →f(n)= Θ(g(n))(a) f(n)=3n+2c1=3, c2=6, n0=1得知f(n) = Θ (n)(b) f(n)=9n2+4n+2c1=9, c2=16, n0=1得知f(n) = Θ (n2)(c) f(n)=8n4+5n3+5c1=8, c2=20, n0=1得知f(n) = Θ (n4)A-2练习题解答第二章练习题答案1. 分别以行为主和以列为主说明之。
(a) 以行为主A(i, j)=l0+(i–1)*u2*d+(j–1)*d(b) 以列为主A(i, j)=l0+(j–1)*u1*d+(i–1)*d2. 以列为主A(i, j)=l0+(j–12)*md+(i–l1)dm=u1–l1+1=5–(–3)+1=9m=u2–l2+1=2–(–4)+1=7A(1, 1) =100+(1–(–4))*9+(1–(–3))=100+45+4=1493. 分别以行为主和以列为主的说明。
数据结构实用教程(第三版)课后答案

数据结构实用教程( 第三版) 课后答案file:///D|/ ------------------ 上架商品---------------------- / 数据结构实用教程( 第三版)课后答案(徐孝凯著)清华大学/第一章绪论.txt第一章绪习题一一、单选题1. 一个数组元数a[i] 与( A ) 的表示等价。
A *(a+i)B a+iC *a+iD &a+i2. 对于两个函数,若函数名相同,但只是( C) 不同则不是重载函数。
A 参数类型B 参数个数C 函数类型3. 若需要利用形参直接访问实参,则应把形参变量说明为(B) 参数。
A 指针B 引用C 值4. 下面程序段的复杂度为(C ) 。
for(int i=0;i<m;i++)for(int j=0;j<n;j++)a[i][j]=i*j;A O(m2)B O(n2)C O(m*n)D O(m+n)5. 执行下面程序段时,执行S语句的次数为(D )。
for(int i=1;i<=n;i++)for(int j=1; j<=i;j++)S;A n2B n2/2C n(n+1)D n(n+1)/26. 下面算法的时间复杂度为( B) 。
int f(unsigned int n){if(n==0||n==1) return 1;Else return n*f(n-1);}A O(1)B O(n)C O(n2)D O(n!)二、填空题1. 数据的逻辑结构被除数分为集合结构、线性结构、树型结构和图形结构四种。
2. 数据的存储结构被分为顺序结构、结构、索引结构和散列结构四种。
3. 在线性结构、树型结构和图形结构中,前驱和后继结点之间分别存在着1 对1 、1 对N 和M对N的关系。
4. 一种抽象数据类型包括数据和操作两个部分。
5. 当一个形参类型的长度较大时,应最好说明为引用,以节省参数值的传输时间和存储参数的空间。
6. 当需要用一个形参访问对应的实参时,则该形参应说明为引用。
数据结构(第3版)习题及实验参考答案14438

附录习题及实验参考答案习题1参考答案1.1.选择题(1). A. (2). A. (3). A. (4). B.,C. (5). A. (6). A. (7). C. (8). C. (9). B. (10.)A.1.2.填空题(1). 数据关系(2). 逻辑结构物理结构(3). 线性数据结构树型结构图结构(4). 顺序存储链式存储索引存储散列表(Hash)存储(5). 变量的取值范围操作的类别(6). 数据元素间的逻辑关系数据元素存储方式或者数据元素的物理关系(7). 关系网状结构树结构(8). 空间复杂度和时间复杂度(9). 空间时间(10). Ο(n)1.3 名词解释如下:数据:数据是信息的载体,是计算机程序加工和处理的对象,包括数值数据和非数值数据。
数据项:数据项指不可分割的、具有独立意义的最小数据单位,数据项有时也称为字段或域。
数据元素:数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项组成。
数据逻辑结构:数据的逻辑结构就是指数据元素间的关系。
数据存储结构:数据的物理结构表示数据元素的存储方式或者数据元素的物理关系。
数据类型:是指变量的取值范围和所能够进行的操作的总和。
算法:是对特定问题求解步骤的一种描述,是指令的有限序列。
1.4 语句的时间复杂度为:(1) Ο(n2)(2) Ο(n2)(3) Ο(n2)(4) Ο(n-1)(5) Ο(n3)1.5 参考程序:main(){int X,Y,Z;scanf(“%d, %d, %d”,&X,&Y,Z);if (X>=Y)if(X>=Z)if (Y>=Z){ printf(“%d, %d, %d”,X,Y,Z);}else{ printf(“%d, %d, %d”,X,Z,Y);}else{ printf(“%d, %d, %d”,Z,X,Y);}elseif(Z>=X)if (Y>=Z){ printf(“%d, %d, %d”,Y,Z,X);}else{ printf(“%d, %d, %d”,Z,Y,X);}else{ printf(“%d, %d, %d”,Y,X,Z);}}1.6 参考程序:main(){int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<=n;i++)scanf(“%f ”,&a[i]);p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x;x=x*x;}printf(“%f”,p)’}习题2参考答案2.1选择题(1). C. (2). B. (3). B. (4). B. 5. D. 6. B. 7. B. 8. A. 9. A. 10. D.2.2.填空题(1). 有限序列(2). 顺序存储和链式存储(3). O(n) O(n)(4). n-i+1 n-i(5). 链式(6). 数据指针(7). 前驱后继(8). Ο(1) Ο(n)(9). s->next=p->next; p->next=s ;(10). s->next2.3. 解题思路:将顺序表A中的元素输入数组a,若数组a中元素个数为n,将下标为0,1,2,…,(n-1)/2的元素依次与下标为n,n-1,…, (n-1)/2的元素交换,输出数组a的元素。
数据结构(第3版)习题答案

数据结构(第3版)习题答案⼗⼆五普通⾼等教育国家级本科规划教材第1章绪论⾼等学校精品资源共享课程1.1什么是数据结构?【答】:数据结构是指按⼀定的逻辑结构组成的⼀批数据,使⽤某种存储结构将这批数据存储于计算机中,并在这些数据上定义了⼀个运算集合。
1.2数据结构涉及哪⼏个⽅⾯?【答】:数据结构涉及三个⽅⾯的内容,即数据的逻辑结构、数据的存储结构和数据的运算集合。
1.3两个数据结构的逻辑结构和存储结构都相同,但是它们的运算集合中有⼀个运算的定义不⼀样,它们是否可以认作是同⼀个数据结构?为什么?【答】:不能,运算集合是数据结构的重要组成部分,不同的运算集合所确定的数据结构是不⼀样的,例如,栈与队列它们的逻辑结构与存储结构可以相同,但由于它们的运算集合不⼀样,所以它们是两种不同的数据结构。
1.4线性结构的特点是什么?⾮线性结构的特点是什么?【答】:线性结构元素之间的关系是⼀对⼀的,在线性结构中只有⼀个开始结点和⼀个终端结点,其他的每⼀个结点有且仅有⼀个前驱和⼀个后继结点。
⽽⾮线性结构则没有这个特点,元素之间的关系可以是⼀对多的或多对多的。
1.5数据结构的存储⽅式有哪⼏种?【答】:数据结构的存储⽅式有顺序存储、链式存储、散列存储和索引存储等四种⽅式。
1.6算法有哪些特点?它和程序的主要区别是什么?【答】:算法具有(1)有穷性(2)确定性(3)0个或多个输⼊(4)1个或多个输出(5)可⾏性等特征。
程序是算法的⼀种描述⽅式,通过程序可以在计算机上实现算法。
1.7抽象数据类型的是什么?它有什么特点?【答】:抽象数据类型是数据类型的进⼀步抽象,是⼤家熟知的基本数据类型的延伸和发展。
抽象数据类型是与表⽰⽆关的数据类型,是⼀个数据模型及定义在该模型上的⼀组运算。
对⼀个抽象数据类型进⾏定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。
⼀旦定义了⼀个抽象数据类型及具体实现,程序设计中就可以像使⽤基本数据类型那样,⼗分⽅便地使⽤抽象数据类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//用队列:
public class Maze {
public int[][] maze = null;
public int[] xx = { 1, 0, -1, 0 };
public int[] yy = { 0, 1, 0, -1 };
public Queue queue = null;
public Maze(int[][] maze) {
this.maze = maze;
queue = new Queue(maze.length * maze.length);
}
public void go() {
Point outPt = new Point(4, 5);
Point curPt = new Point(0, 0);
Node curNode = new Node(curPt, null);
maze[curPt.x][curPt.y] = 2;
queue.entryQ(curNode);
while (!queue.isEmpty()) {
curNode = queue.outQ();
for (int i = 0; i < xx.length; ++i) {
Point nextPt = new Point();
nextPt.x = (curNode.point).x + xx[i];
nextPt.y = (curNode.point).y + yy[i];
if (check(nextPt)) {
Node nextNode = new Node(nextPt, curNode);
queue.entryQ(nextNode);
maze[nextPt.x][nextPt.y] = 2;
if (nextPt.equals(outPt)) { //判断是否到达终点
Queue storeQueue=new Queue(maze.length * maze.length);
storeQueue.entryQ(nextNode);
while ((curNode = nextNode.previous) != null) {
nextNode = curNode;
storeQueue.entryQ(curNode);
}
System.out.println("A Path is:");
while (!storeQueue.isEmpty()) {
curNode = storeQueue.outQ(); //出栈
System.out.println(curNode.point);
}
return;
}
}
}
}
System.out.println("Non solution!");
}
public boolean check(Point p) {
if (p.x < 0 || p.x >= maze.length || p.y < 0 || p.y >= maze[0].length) { return false;
}
if (maze[p.x][p.y] != 0) {
return false;
}
return true;
}
public static void main(String[] args) {
int[][] maze = {
{ 0, 1, 0, 0, 0, 1 },
{ 0, 0, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 0, 1 },
{ 0, 0, 0, 1, 1, 1 },
{ 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1 },
};
new Maze(maze).go();
}
}。