当年学数据结构,正好java也刚刚学会gui编程,就想着结合起来做个小东西,然后这个自动走路的小球就出来了。

一个方向的枚举Dir.java

public enum Dir {
L,U,R,D
}

结束标志EndFlag.java

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random; public class EndFlag implements MyDraw{
private int row,col;
private Random random = new Random();
private MyMaze mm;
private int h = MyMaze.BORDER_SIZE;
private int w = MyMaze.BORDER_SIZE;
Color c;
public EndFlag(MyMaze m,Color c){
this.row = 27;
this.col = 27;
this.mm = m;
this.c = c;
} public void draw(Graphics g){
Color color = g.getColor();
g.setColor(this.c);
g.fillOval(col*MyMaze.BORDER_SIZE, row*MyMaze.BORDER_SIZE, w, h);
g.setColor(color);
}
}

所有能绘图的对象的抽象接口

import java.awt.Graphics;

public interface MyDraw {
public void draw(Graphics g);
}

主窗体

import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class MyMaze extends Frame { public static final int BORDER_SIZE = 20;
public static final int ROW = 30;
public static final int COL = 30;
public static final int x = 300;
public static final int y = 100;
private static Color wallColor = Color.BLACK;
private static Color endFlagColor = Color.RED;
private static int success = 2;
private static int fail = 1; private Image offScreenImage = null;
private Font font = new Font("宋体", Font.BOLD,40 );
public Wall w = new Wall(this,wallColor); public EndFlag ef = new EndFlag(this,endFlagColor);
public MyMethod mmd = new MyMethod(this, Color.BLUE,1,"小蓝");
public MyMethod mmd2 = new MyMethod(this, Color.YELLOW,2,"大黄");
public MyMethod mymmd = new MyMethod(this, Color.ORANGE,0,"手动");
private boolean pause = false;//是否暂停重画线程 private Graphics g; public void launch(){
this.setLocation(x, y);
this.setBackground(Color.WHITE);
this.setSize(COL*BORDER_SIZE, ROW*BORDER_SIZE);
this.setTitle("迷宫");
//this.setAlwaysOnTop(false);
this.setUndecorated(true);
this.addKeyListener(new KeyMonitor()); this.addWindowListener(new WindowAdapter() { @Override
public void windowClosing(WindowEvent e) {
System.exit(0);
} });
this.setResizable(false);
this.setVisible(true); new Thread(new PaintThread()).start();
} public static void main(String[] args) {
new MyMaze().launch();
} public void draw(MyDraw d){
d.draw(g);
} public boolean isSuccess(MyMethod m){
if(m.isSuccess() == success){
return true;
}
return false;
} public boolean isFail(MyMethod m){
if(m.isSuccess() == fail){
return true;
}
return false;
} @Override
public void paint(Graphics g) {
this.g = g;
if(isSuccess(mmd) && isSuccess(mmd2)){
g.setColor(Color.RED);
g.setFont(font);
g.drawString("游戏成功!", 225, 325);
return;
} if(isFail(mmd) && isFail(mmd2)){
g.setColor(Color.RED);
g.setFont(font);
g.drawString("游戏失败!", 225, 325);
return;
} Color color = g.getColor();
g.setColor(Color.WHITE);
g.fillRect(0, 0, COL*BORDER_SIZE, ROW*BORDER_SIZE);
g.setColor(color);
draw(w);
draw(ef);
draw(mmd);
draw(mmd2);
draw(mymmd);
} @Override
public void update(Graphics g) {
if(offScreenImage == null){
offScreenImage = this.createImage(COL*BORDER_SIZE, ROW*BORDER_SIZE);
}
Graphics gra = offScreenImage.getGraphics();
paint(gra);
g.drawImage(offScreenImage, 0, 0, null);
} private class PaintThread implements Runnable {
public void run() {
while(true){
if(pause){
continue;
}
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} } private class KeyMonitor extends KeyAdapter { @Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_SPACE){
pause = !pause;
}else if(key == KeyEvent.VK_ESCAPE){
System.exit(0);
}
mymmd.keyPressed(e);
} } }

自动寻路小球的走法

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent; import org.w3c.dom.Node; public class MyMethod implements MyDraw{
private int step = 0;
private int choose; int success = 0;
public int isSuccess() {
return success;
} private int row = 3;
private int col = 3;
private Dir dir = Dir.R;
private int w = MyMaze.BORDER_SIZE;
private int h = MyMaze.BORDER_SIZE;
private String name;
Color c;
MyMaze mm;
Stack moveStack = new Stack();
Stack recordStack = new Stack(); public MyMethod(MyMaze mm,Color c,int choose,String name){
this.c = c;
this.mm = mm;
this.choose = choose;
this.name = name;
keepMoveRecord();
} public void draw(Graphics g){
move();
Color color = g.getColor();
g.setColor(c);
g.fillOval(col*MyMaze.BORDER_SIZE, row*MyMaze.BORDER_SIZE, w, h);
g.setColor(color);
} void move(){
if(this.row == 27 && this.col == 27){
success = 2;//成功
return;
}
if(moveStack.isEmpty()){
success = 1;//无路可走
return;
}
step ++;
switch (choose) {
case 0:
return;
case 1:
if(RisOpen()){
goRight();
return;
}
if(DisOpen()){
goDown();
return;
}
if(UisOpen()){
goUp();
return;
}
if(LisOpen()){
goLeft();
return;
}
break;
case 2:
if(DisOpen()){
goDown();
return;
}
if(RisOpen()){
goRight();
return;
}
if(UisOpen()){
goUp();
return;
}
if(LisOpen()){
goLeft();
return;
}
break;
}
goBack();
} boolean LisOpen(){
if(checkWall(this.row, this.col-1) || checkRecordRepeat(this.row, this.col-1)){
return false;
}
return true;
} boolean UisOpen(){
if(checkWall(this.row-1, this.col) || checkRecordRepeat(this.row-1, this.col)){
return false;
}
return true;
} boolean RisOpen(){
if(checkWall(this.row, this.col+1) || checkRecordRepeat(this.row, this.col+1)){
return false;
}
return true;
} boolean DisOpen(){
if(checkWall(this.row+1, this.col) || checkRecordRepeat(this.row+1, this.col)){
return false;
}
return true;
} void keepMoveRecord(){
keepMove();
keepRecord();
} void keepMove(){
moveStack.push(row, col, dir);
} void keepRecord(){
recordStack.push(row, col, dir);
} boolean checkRecordRepeat(int r,int c){
return recordStack.isInStack(r, c);
} boolean checkWall(int row,int col){
if(mm.w.wallIsSet(row, col)){
return true;
}
return false;
} void goRight(){
System.out.println(this.name + ": 向右走一步 + step:"+step);
this.row = row;
this.col = col+1;
keepMoveRecord();
} void goDown(){
System.out.println(this.name + ": 向下走一步 + step:"+step);
this.row = row+1;
this.col = col;
keepMoveRecord();
} void goLeft(){
System.out.println(this.name + ": 向左走一步 + step:"+step);
this.row = row;
this.col = col-1;
keepMoveRecord();
} void goUp(){
System.out.println(this.name + ": 向上走一步 + step:"+step);
this.row = row-1;
this.col = col;
keepMoveRecord();
} void goBack(){
moveStack.pop();
System.out.println(this.name + ": 向后退一步。。。");
this.row = moveStack.getTopRow();
this.col = moveStack.getTopCol();
} void keyPressed(KeyEvent e){
int key = e.getKeyCode();
switch(key){
case KeyEvent.VK_LEFT:
if(LisOpen()){
goLeft();
}
break;
case KeyEvent.VK_RIGHT:
if(RisOpen()){
goRight();
}
break;
case KeyEvent.VK_UP:
if(UisOpen()){
goUp();
}
break;
case KeyEvent.VK_DOWN:
if(DisOpen()){
goDown();
}
break;
case KeyEvent.VK_B:
goBack();
}
} }

自己实现的一个栈,也可以用sun提供的替换

class Stack{

    private static final int STACK_LENGTH = 1000;
private int[] posRow = new int[STACK_LENGTH];
private int[] posCol = new int[STACK_LENGTH];
Dir[] dirsDir = new Dir[STACK_LENGTH]; int base;
int top;
public Stack(){
base = 0;
top = 0;
}
void push(int row,int col,Dir dir){
if(!isFull()){
posRow[top] = row;
posCol[top] = col;
dirsDir[top] = dir;
top++;
}
}
void pop(){
if(isEmpty()) return;
top--;
} boolean isEmpty(){
if(top == base){
return true;
}
return false;
} boolean isFull(){
if(top == STACK_LENGTH){
return true;
}
return false;
} int getTopRow(){
if(isEmpty()) return 0;
return posRow[top-1];
} int getTopCol(){
if(isEmpty()) return 0;
return posCol[top-1];
} Dir getTopDir(){
return dirsDir[top];
} boolean isInStack(int row,int col){
for(int i = 0 ; i<top ; i++){
if(posRow[i] == row && posCol[i] == col){
return true;
}
}
return false;
} }

墙的类

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.List;
import java.util.Random; public class Wall implements MyDraw{ private MyMaze mm; Color c ;
public List<Node> nodes = new ArrayList<Node>(); Random rd = new Random(); public Wall(MyMaze mm,Color c){
this.mm = mm;
this.c = c;
makeWall();
} public void draw(Graphics g){
for(int i = 0; i<nodes.size();i++){
nodes.get(i).draw(g);
}
} void makeWall(){
boolean b = true;
for(int i = 0 ; i<MyMaze.COL*MyMaze.ROW/3;i++){
Node node = new Node(rd.nextInt(MyMaze.ROW-2)+1, rd.nextInt(MyMaze.COL-2)+1);
boolean b1 = node.getCol()==3 && node.getRow()==3 ;
boolean b2 = node.getCol()==27 && node.getRow()==27 ;
if(b1) b=false;
else if(b2) b=false;
else b=true;
if(b){
nodes.add(node);
}
} for(int i = 0 ; i< MyMaze.ROW; i++){
for(int j = 0; j<MyMaze.COL ; j++){
if(i == 0 || j == 0 || i == MyMaze.COL-1 ||j == MyMaze.ROW-1){
Node n = new Node(i,j);
nodes.add(n);
}
}
} } public boolean wallIsSet(int row,int col){
for(int i=0; i<nodes.size();i++){
Node node = nodes.get(i);
if(row == node.getRow() && col == node.getCol()){
return true;
}
}
return false;
} private class Node{
private Toolkit tk = Toolkit.getDefaultToolkit();
private Image image = null;
private int row,col; public int getRow() {
return row;
} public int getCol() {
return col;
} private int w = MyMaze.BORDER_SIZE;
private int h = MyMaze.BORDER_SIZE; public Node(int row, int col) {
this.row = row;
this.col = col;
image = tk.getImage(Wall.class.getClassLoader().getResource("images/2.jpg"));
} public void draw(Graphics g){
g.drawImage(image, col*MyMaze.BORDER_SIZE, row*MyMaze.BORDER_SIZE, null);
}
} }

墙的小图片aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/4QPqRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAbAAAAcgEyAAIAAAAUAAAAjYdpAAQAAAABAAAApAAAANAAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIENTIFdpbmRvd3MAMjAxMToxMDoyOSAyMTowNDoxMgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAABAAAAFAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAK0AAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAQBIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAFAAUAwEiAAIRAQMRAf/dAAQAAv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8AyL7cpuRs2VH1HuAO53aXfuKBdl1se4tqIEu+k74/uJ7hiC5wOMZLnR+jHYoTGY7BYbMZ0bnOE1g+1Vfo6OvdNvy9m/bVEbvpO8J/cSUNuLE/ZjHP82OEkPonXu//0Kl/7P8AtLZ9ed7/ANxRt/Z/pPn142mfoLzdJVO2zpd930n/ACf6f+Hjb/I8El5skl9iftf/2f/tDmpQaG90b3Nob3AgMy4wADhCSU0EBAAAAAAABxwCAAACAAIAOEJJTQQlAAAAAAAQRgzyiSa4VtqwnAGhsKeQdzhCSU0D7QAAAAAAEABIAAAAAQACAEgAAAABAAI4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0EDQAAAAAABAAAAHg4QklNBBkAAAAAAAQAAAAeOEJJTQPzAAAAAAAJAAAAAAAAAAABADhCSU0ECgAAAAAAAQAAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAA4QklNBAgAAAAAABAAAAABAAACQAAAAkAAAAAAOEJJTQQeAAAAAAAEAAAAADhCSU0EGgAAAAADQwAAAAYAAAAAAAAAAAAAABQAAAAUAAAAB2cqaAeYmAAtADFSb2csAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAFAAAAABSZ2h0bG9uZwAAABQAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxv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qEcBVn/oAU6oRwFWf+gAAgGUngkBVT/pAZSeCQFVP+kBlJ4JAVU/6QACAZSK6QFRgBIBlIrpAVGAEgGUiukBUYASAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgEGrcIBSo8oAQatwgFKjygBBq3CAUqPKAACAQK4nwFKsNIBArifAUqw0gECuJ8BSrDSAAIBBVx2AZHw0wEFXHYBkfDTAQVcdgGR8NMAAgEJUZkBkc8oAQlRmQGRzygBCVGZAZHPKDhCSU0EBgAAAAAABwAIAAAAAQEA/+EZMmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLycgeDp4bXB0az0nWE1QIHRvb2xraXQgMy4wLTI4LCBmcmFtZXdvcmsgMS42Jz4KPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJyB4bWxuczppWD0naHR0cDovL25zLmFkb2JlLmNvbS9pWC8xLjAvJz4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6ZXhpZj0naHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8nPgogIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yMDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSd1dWlkOjE4OWRmZjgzLTAyMmUtMTFlMS1iMjgwLWZmNWViMDQ1Nzk1ZCcKICB4bWxuczpwZGY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8nPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6MTg5ZGZmODMtMDIyZS0xMWUxLWIyODAtZmY1ZWIwNDU3OTVkJwogIHhtbG5zOnBob3Rvc2hvcD0naHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyc+CiAgPHBob3Rvc2hvcDpIaXN0b3J5PjwvcGhvdG9zaG9wOkhpc3Rvcnk+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6dGlmZj0naHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8nPgogIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgPHRpZmY6WFJlc29sdXRpb24+NzIvMTwvdGlmZjpYUmVzb2x1dGlvbj4KICA8dGlmZjpZUmVzb2x1dGlvbj43Mi8xPC90aWZmOllSZXNvbHV0aW9uPgogIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6eGFwPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvJz4KICA8eGFwOkNyZWF0ZURhdGU+MjAxMS0xMC0yOVQyMTowNDoxMiswODowMDwveGFwOkNyZWF0ZURhdGU+CiAgPHhhcDpNb2RpZnlEYXRlPjIwMTEtMTAtMjlUMjE6MDQ6MTIrMDg6MDA8L3hhcDpNb2RpZnlEYXRlPgogIDx4YXA6TWV0YWRhdGFEYXRlPjIwMTEtMTAtMjlUMjE6MDQ6MTIrMDg6MDA8L3hhcDpNZXRhZGF0YURhdGU+CiAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MgV2luZG93czwveGFwOkNyZWF0b3JUb29sPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9J3V1aWQ6MTg5ZGZmODMtMDIyZS0xMWUxLWIyODAtZmY1ZWIwNDU3OTVkJwogIHhtbG5zOnN0UmVmPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjJwogIHhtbG5zOnhhcE1NPSdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vJz4KICA8eGFwTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICA8c3RSZWY6aW5zdGFuY2VJRD51dWlkOjQ4YmZjYzk0LWZiYmItMTFlMC04MzliLWZjYjIzZmQ2NGJkMjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgPHN0UmVmOmRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjQ4YmZjYzkzLWZiYmItMTFlMC04MzliLWZjYjIzZmQ2NGJkMjwvc3RSZWY6ZG9jdW1lbnRJRD4KICA8L3hhcE1NOkRlcml2ZWRGcm9tPgogIDx4YXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxODlkZmY4Mi0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQ8L3hhcE1NOkRvY3VtZW50SUQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0ndXVpZDoxODlkZmY4My0wMjJlLTExZTEtYjI4MC1mZjVlYjA0NTc5NWQnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6Zm9ybWF0PmltYWdlL2pwZWc8L2RjOmZvcm1hdD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9J3cnPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAAB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" alt="" />

java版迷宫的更多相关文章

  1. 剑指Offer——回溯算法解迷宫问题(java版)

    剑指Offer--回溯算法解迷宫问题(java版)   以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路.   下面我们来详细讲一 ...

  2. ArcGIS Server 10 Java 版的Rest服务手动配置方法

    Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...

  3. PetaPojo —— JAVA版的PetaPoco

    背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...

  4. 【转载】java版打字练习软件

    网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...

  5. 微博地址url(id)与mid的相互转换 Java版

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

  6. JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄

    前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...

  7. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

  8. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  9. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

随机推荐

  1. 嵌入式开发之精确延时---多线程延时阻塞精度asm("nop") nanosleep usleep sleep select

    http://blog.csdn.net/lile777/article/details/45503087

  2. javascript实现一行文字随不同设备自适应改变字体大小至字数完全展示

    产品提了一个小需求,希望一行能展示用户输入的所有文字,因为最多限制为25字符,但是如果夹杂英文/韩文/日文等,即使字符数是一样的,但是展示的长度不一样,则有些title标题会被截断. 效果如图 前提是 ...

  3. ABBYY OCR技术教电脑阅读缅甸语(上)

    缅甸联邦共和国,原名缅甸,是东南亚的一个国家,从1962年到2010年,缅甸一直被政变后上台的军政府统治,直至最近5年它才对外界开放,与其他国家建立了贸易与文化联系. 缅甸语由很多方言组成,但所有方言 ...

  4. SQL中in参数在存储过程中传递及使用的方法

    背景: 1.使用存储过程 2.存储过程中有in 3.in括号里面的内容作为参数传递 解决方案: 1.直接拼接sql 可在存储过程中拼接字符串,然后执行此字符串,类似于js中的eval PROCEDUR ...

  5. SpringBoot------Servlet3.0的注解自定义原生Servlet

    1.添加需要使用的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w ...

  6. python的数据结构之栈

    栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构. 由于栈具有后入先出的特点,所以任何不在栈顶的元素 ...

  7. day_6.14py网络编程

    被动套接字和新建出套接字的区别 单任务,单线程,非阻塞!!!!服务器! #2018-6-14 16:51:25 #!--*--coding:utf-8 --*-- ''' 单进程,单任务 少的可以,多 ...

  8. xml文件以及解析

    1.创建一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <!-- xml:是一个可扩展的标记语言 ...

  9. Python基础爬虫

    搭建环境: win10,Python3.6,pycharm,未设虚拟环境 之前写的爬虫并没有架构的思想,且不具备面向对象的特征,现在写一个基础爬虫架构,爬取百度百科,首先介绍一下基础爬虫框架的五大模块 ...

  10. MINIUI后台获取数据

    1.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...