当年学数据结构,正好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. OAuth 2.0 C# 版

    using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using Syste ...

  2. EventBus vs Otto vs Guava--自定义消息总线

    同步发表于http://avenwu.net/ioc/2015/01/29/custom_eventbus Fork on github https://github.com/avenwu/suppo ...

  3. Mysql 导入导出csv 中文乱码

    这篇文章介绍了Mysql 导入导出csv 中文乱码问题的解决方法,有需要的朋友可以参考一下   导入csv: load data infile '/test.csv' into table table ...

  4. Ubuntu 实践

    Ubuntu 安装中文支持 开始装的是Ubuntu Server,后来需要某些图形工具,所以装了个Gnome,没想到无论如何都显示不了中文,按照网上的方法试了一堆,装了Synaptic,KDE和GNO ...

  5. 如何查看WAS生成的Snap.***.trc文件

    WAS发生heapdump时随之还产生了javacore和Snap.***.trc文件 Snap.***.trc文件无法直接查看,需要对其进行格式化,就算用文本编辑器打开看见的也是有很多乱码 跟踪格式 ...

  6. laravel 5.4 中使用migrate

    1. 创建表结构 a. 命令: php artisan make:migration create_posts_table 2.生产文件 <?php use Illuminate\Support ...

  7. 【转帖】oracle数据类型和对应的java类型

    原文地址:http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.ht ...

  8. nginx负载均衡一:基础知识

    基础信息 nginx 的 upstream目前支持 4 种方式的分配  1).轮询(默认)  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.  2).weight ...

  9. ScrollView fillViewport

    话不多说直接上图

  10. linux相关(3)

    1. shell环境变量 能够存在于本shell进程及其子shell进程的变量.变量可以从父shell进程传递给子shell进程,而不能反过来,因此环境变量在子shell进程中无论如何修改都不会影响到 ...