This topic is my one course design, is also my first time to finish a small thing independently, to tell the truth, last night that moment was very fulfilling. The whole person was happy to jump up in the study room. Because before has been self-taught Java, never done any project of their own, this course design took me three days, in fact, it should be two days and a half, two days and a half after I made out with the roommate to show off, old brother read to say, if the road before plugging dead, a new way to change. And then he blew it up ....... After finishing I was only happy three seconds, because after the excitement is indeed endless emptiness, do not know to whom to share their achievements, single dog can not hurt ah. Words don't say much, directly on the code
Interface Construction Section
Package maze problem;
Import Java.awt.Color;
Import Javax.swing.JFrame;
Import Javax.swing.JLabel;
Import Javax.swing.JPanel;
public class MyFrame extends JFrame {
private int FIELDSIZE = 50;
Public jlabel[][] Labs;
Public MyFrame () {
Settitle ("Maze problem");
SetName ("test");
SetBounds (400, 200, 800, 850);
Setresizable (FALSE);
JPanel Boardpane = new JPanel ();
Boardpane.setlayout (NULL);
Add (Boardpane);
Labs = new JLABEL[16][16];
for (int x = 0; x < + × x + +) {
for (int y = 0; y < y++) {
JLabel Backgroundlabel = new JLabel ();
Backgroundlabel.setopaque (TRUE);
Backgroundlabel.setbounds (x * FIELDSIZE, Y * FIELDSIZE, FIELDSIZE, FIELDSIZE);
Boardpane.add (Backgroundlabel, New Integer (1), 0);
Labs[x][y] = Backgroundlabel;
}
}
SetColor (Labs);
Setdefaultcloseoperation (Exit_on_close);
SetVisible (TRUE);
}
private void SetColor (jlabel[][] Labs) {
for (int x = 0; x < + × x + +) {
for (int y = 0; y < y++) {
if (x = = 0) {
Labs[x][y].setbackground (Color.Black);
}
}
}
for (int x = 0; x < + × x + +) {
for (int y = 0; y < y++) {
if (x = = 15) {
Labs[x][y].setbackground (Color.Black);
}
}
}
for (int x = 0; x < + × x + +) {
for (int y = 0; y < y++) {
if (y = = 0) {
Labs[x][y].setbackground (Color.Black);
}
}
}
for (int x = 0; x < + × x + +) {
for (int y = 0; y < y++) {
if (y = = 15) {
Labs[x][y].setbackground (Color.Black);
}
}
}
for (int y = 0; y < 8; y++) {
Labs[2][y].setbackground (Color.Black);
}
for (int y = 9;y < y++) {
Labs[2][y].setbackground (Color.Black);
}
for (int x= 3; x < 7;x++) {
Labs[x][7].setbackground (Color.Black);
}
for (int x= 6; x < 12;x++) {
Labs[x][4].setbackground (Color.Black);
}
Labs[6][9].setbackground (Color.Black);
Labs[6][10].setbackground (Color.Black);
for (int x= 3; x < 10;x++) {
Labs[x][10].setbackground (Color.Black);
}
for (int x= 4; x < 11;x++) {
Labs[x][13].setbackground (Color.Black);
}
Labs[8][15].setbackground (Color.Black);
for (int y = 2;y < 4; y++) {
Labs[11][y].setbackground (Color.Black);
}
for (int y = 6;y <; y++) {
Labs[11][y].setbackground (Color.Black);
}
for (int y = 7;y <; y++) {
Labs[13][y].setbackground (Color.Black);
}
Labs[1][1].setbackground (color.red);
Labs[14][14].setbackground (Color.green);
Labs[9][6].setbackground (Color.Black);
Labs[9][5].setbackground (Color.Black);
Labs[13][1].setbackground (Color.Black);
Labs[13][2].setbackground (Color.Black);
Labs[13][3].setbackground (Color.Black);
Labs[14][3].setbackground (Color.Black);
Labs[14][4].setbackground (Color.Black);
Labs[11][5].setbackground (Color.Black);
Labs[14][5].setbackground (Color.Black);
Labs[12][13].setbackground (Color.Black);
Labs[3][13].setbackground (Color.Black);
Labs[14][6].setbackground (Color.Black);
}//Construction Interface
public static void Main (string[] args) {
MyFrame myframe = new MyFrame ();
}
Analysis:
The red is the entrance, the green is the exit. When access to green, the program ends.
}
Implement the definition of the stack yourself, because our curriculum design does not allow direct invocation of the API
Package maze problem;
public class Mystack_text {
Object[] stacks;
int size;
int top;
int Len;
public mystack_text (int size) {
Super ();
this.size = size;
This.stacks = new Object[this.size];
This.top =-1;
}
Public Object Peek () {
return this.stacks[top];
}
public Boolean empty () {
return top = = (-1);
}
public Boolean isfull () {
return top = = (size-1);
}
public void push (Object value) {
len++;
Stacks[++this.top] = value;
}
Public Object pop () {
len--;
return stacks[this.top--];
}
public int Len () {
return This.len;
}
}
Core algorithms Section
Analysis: No analysis, is the foundation of the construction of data structure stack
Package maze problem;
Import Java.awt.Color;
Import Java.util.Stack;
Import Java.util.TimerTask;
Import Javax.swing.JLabel;
public class Run extends timertask{
stack<jlabel> stack = new stack<jlabel> ();//Do not want to define the stack, where you can call
Run () {
}
MyFrame myframe = new MyFrame ();
Mystack_text stack=new mystack_text (100);
public void Run () {
int i=1,j=1;
Stack.push (myframe.labs[1][1]);
while (!stack.empty () | | Myframe.labs[i][j].getbackground ()! = Color.green) {
//??
while (Myframe.labs[i][j-1].getbackground ()! = Color.Black &&myframe.labs[i][j].getbackground ()! = color.green&& myframe.labs[i][j-1].getbackground ()! = color.yellow&& MyFrame.labs[i][j-1]. Getbackground ()! = color.red&& Myframe.labs[i][j-1].getbackground ()! = Color.pink) {
if (Myframe.labs[i][--j].getbackground ()! = Color.green)
try{
Thread.Sleep (100);
}
catch (Interruptedexception e) {
E.printstacktrace ();
}
Myframe.labs[i][j].setbackground (Color.yellow);
Stack.push (Myframe.labs[i][j]);
}
//??
while (Myframe.labs[i][j+1].getbackground ()! = Color.black&&myframe.labs[i][1+j].getbackground ()! = Color.green && myframe.labs[i][j+1].getbackground ()! = color.yellow&& Myframe.labs[i][j+1]. Getbackground ()! = color.red&& Myframe.labs[i][j+1].getbackground ()! = Color.pink) {
if (Myframe.labs[i][++j].getbackground ()! = Color.green) {
Myframe.labs[i][j].setbackground (Color.yellow);
try{
Thread.Sleep (100);
}
catch (Interruptedexception e) {
E.printstacktrace ();
}
Stack.push (Myframe.labs[i][j]);
}
}
//??
while (Myframe.labs[i-1][j].getbackground ()! = Color.Black &&myframe.labs[i][j].getbackground ()! = color.green&& myframe.labs[i-1][j].getbackground ()! = color.yellow&& MyFrame.labs[i-1][j]. Getbackground ()! = color.red&& Myframe.labs[i-1][j].getbackground ()! = Color.pink) {
if (Myframe.labs[--i][j].getbackground ()! = Color.green) {
Myframe.labs[i][j].setbackground (Color.yellow);
try{
Thread.Sleep (100);
}
catch (Interruptedexception e) {
E.printstacktrace ();
}
Stack.push (Myframe.labs[i][j]);
}
}
//??
while (Myframe.labs[i+1][j].getbackground ()! = Color.Black &&myframe.labs[i][j].getbackground ()! = color.green&& myframe.labs[i+1][j].getbackground ()! = color.yellow&& MyFrame.labs[i+1][j]. Getbackground ()! = color.red&& Myframe.labs[i+1][j].getbackground ()! = Color.pink) {
if (Myframe.labs[++i][j].getbackground ()! = Color.green) {
Myframe.labs[i][j].setbackground (Color.yellow);
try{
Thread.Sleep (100);
}
catch (Interruptedexception e) {
E.printstacktrace ();
}
Stack.push (Myframe.labs[i][j]);
}
}
if (Myframe.labs[i][j+1].getbackground ()! = Color.green) {
try{
Thread.Sleep (100);
}
catch (Interruptedexception e) {
E.printstacktrace ();
}
JLabel xx= (JLabel) Stack.peek ();
i= Xx.getx ()/50;
j = xx.gety ()/50;
int pp = 0;
if (myframe.labs[i+1][j].getbackground () = = color.black| | Myframe.labs[i+1][j].getbackground () = = color.pink| | Myframe.labs[i+1][j].getbackground () = = Color.yellow)
pp++;
if (myframe.labs[i-1][j].getbackground () = = color.black| | Myframe.labs[i-1][j].getbackground () = = color.pink| | Myframe.labs[i-1][j].getbackground () = = Color.yellow)
pp++;
if (myframe.labs[i][j+1].getbackground () = = color.black| | Myframe.labs[i][j+1].getbackground () = = color.pink| | Myframe.labs[i][j+1].getbackground () = = Color.yellow)
pp++;
if (myframe.labs[i][j-1].getbackground () = = color.black| | Myframe.labs[i][j-1].getbackground () = = color.pink| | Myframe.labs[i][j-1].getbackground () = = Color.yellow)
pp++;
if (Myframe.labs[i][j].getbackground ()! = Color.green)
if (pp==4) {
Stack.pop ();
Xx.setbackground (Color.pink);
System.out.println (i);
System.out.println (j);
}//if
}//if
}//while
}
public static void Main (string[] args) {
MyFrame myframe = new MyFrame ();
Run R =new run ();
R.run (1, 1);
R.run ();
}
}
Analysis: Here the black represents the barrier, the white represents the path that can go, yellow indicates the final path, and the pink is the tag that goes out of the stack after the stack.
try{
Thread.Sleep (100);
}
catch (Interruptedexception e) {
E.printstacktrace ();
}
Using the process of hibernation, let the stack out of the stack can be seen intuitively
int pp = 0;
if (myframe.labs[i+1][j].getbackground () = = color.black| | Myframe.labs[i+1][j].getbackground () = = color.pink| | Myframe.labs[i+1][j].getbackground () = = Color.yellow)
pp++;
if (myframe.labs[i-1][j].getbackground () = = color.black| | Myframe.labs[i-1][j].getbackground () = = color.pink| | Myframe.labs[i-1][j].getbackground () = = Color.yellow)
pp++;
if (myframe.labs[i][j+1].getbackground () = = color.black| | Myframe.labs[i][j+1].getbackground () = = color.pink| | Myframe.labs[i][j+1].getbackground () = = Color.yellow)
pp++;
if (myframe.labs[i][j-1].getbackground () = = color.black| | Myframe.labs[i][j-1].getbackground () = = color.pink| | Myframe.labs[i][j-1].getbackground () = = Color.yellow)
pp++;
if (Myframe.labs[i][j].getbackground ()! = Color.green)
if (pp==4) {
Stack.pop ();
Xx.setbackground (Color.pink);
//system.out.println (i);
//system.out.println (j);
}//if
This should be my pride, to judge when the stack. After analysis, it is found that the stack is the top of the stack is not allowed to go up or down, that is, yellow, pink, black, three kinds of color in the surrounding of one or several. Therefore, the definition of a PP variable, in the upper and lower left and right there are yellow, pink, black three colors any number of times, pp++, when the pp==4, that is, about the top and bottom are the three colors of one or several, out of the stack. I think, I think ah, this should be a form of abstract thinking, abstract four weeks of environmental consistency, the unified judgment, reduce the amount of code.
Java non-recursive implementation of maze problem