package exercise0;
public class Test2 {
/**
* @param args
*/
public final static int MAXSIZE = 65535;
// public final static int LIMITLAYER =20;
public static void main(String[] args) {
long start = System.currentTimeMillis();// 开始时间
// TODO 自动生成方法存根
OneState x, y;
OneState[] Graphy;
SqQueue Open;
SqStack Close;
Operators Operator;
int count1 = 0;
int count2 = 0;
int count3 = 0;
boolean flag = false;
int[][] mid1 = { { 2, 8, 3 }, { 1, 0, 4 }, { 7, 6, 5 } };
int[][] mid2 = { { 1, 2, 3 }, { 8, 0, 4 }, { 7, 6, 5 } };
// int[][] mid1 = { { 3, 2, 8 }, { 1, 0, 4 }, { 7, 6, 5 } };
// int[][] mid2 = { { 1, 2, 3 }, { 8, 0, 4 }, { 7, 6, 5 } };
// int [][] mid1={{6,7,8,9},{5,0,1,10},{4,3,2,11},{15,14,13,12}};
// int [][] mid2={{6,5,4,15},{7,0,3,14},{8,1,2,13},{9,10,11,12}};
operator mid3 = operator.ROOT;
x = new OneState(mid1);
y = new OneState(mid2);
Graphy = new OneState[MAXSIZE];
Open = new SqQueue();
Close = new SqStack();
Operator = new Operators();
if (Operator.stateCompare(x, y) == true)
System.out.println("the start state is the end start");
else {
Open.EnQueue(x);
OneState p; // =new OneState();
while (!Open.IsEmpty()) {
Open.SelectSort();
p = new OneState(Open.DeQueue());
mid3 = p.getOperate();
switch (mid3) {
case ROOT: {
// System.out.println(mid3);
p.setParent(count3++);
p.setId(++count1);
p.setLayer(++count2);
p.setEstimate(y);
Graphy[count1] = new OneState(p);
count2 = p.getLayer() + 1;
if (Operator.moveLeft(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.LEFT);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveRight(p);
}
if (flag)
break;
}
if (Operator.moveRight(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.RIGHT);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
// Open.DeQueue().display();
Operator.moveLeft(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveUp(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.UP);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveDown(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveDown(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.DOWN);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveUp(p);
}
if (flag)
break;
// p.display();
}
// Open.SelectSort();
break;
}// case ROOT
case LEFT: {
// count3++;
count3 = p.getId();
count2 = p.getLayer() + 1;
if (Operator.moveLeft(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.LEFT);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveRight(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveUp(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.UP);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveDown(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveDown(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.DOWN);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveUp(p);
}
if (flag)
break;
// p.display();
}
// Open.SelectSort();
break;
}// case LEFT
case RIGHT: {
// count3++;
count3 = p.getId();
count2 = p.getLayer() + 1;
if (Operator.moveRight(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.RIGHT);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveLeft(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveUp(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.UP);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveDown(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveDown(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.DOWN);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveUp(p);
}
if (flag)
break;
// p.display();
}
// Open.SelectSort();
break;
}// case RIGHT
case UP: {
count3 = p.getId();
count2 = p.getLayer() + 1;
if (Operator.moveLeft(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.LEFT);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveRight(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveRight(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.RIGHT);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveLeft(p);
}
if (flag)
break;
// p.display();
}
if (Operator.moveUp(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate(y);
p.setOperate(operator.UP);
Graphy[count1] = new OneState(p);
if (Operator.stateCompare(p, y))
flag = true;
else {
Open.EnQueue(Graphy[count1]);
Operator.moveDown(p);
}
if (flag)
break;
// p.display();
}
// Open.SelectSort();
break;
}// case UP
case DOWN: {
// count3++;
count3 = p.getId();
count2 = p.getLayer() + 1;
if (Operator.moveLeft(p)) {
p.setParent(count3);
p.setId(++count1);
p.setLayer(count2);
p.setEstimate
- 1
- 2
前往页