📄 test0.java
字号:
package exercise1;
public class Test0 {
/**
* @param args
*/
public final static int MAXSIZE = 65535;
public static void main(String[] args) {
// TODO 自动生成方法存根
OneState x, y;
SqQueue Open;
SqStack Close;
OneState[] SearchTree;
Rules Take;
int count1 = 0;
int[] mid1 = { 3, 3, 1 };
int[] mid2 = { 0, 0, 0 };
// operator mid3=operator.PQ;
int mid4 = 0;
boolean flag = false;
x = new OneState(mid1);
y = new OneState(mid2);
Open = new SqQueue();
Close = new SqStack();
SearchTree = new OneState[MAXSIZE];
Take = new Rules();
if (Take.stateCompare(x, y) == true)
System.out.println("the start state is the end state;");
else {
Open.EnQueue(x);
OneState p = new OneState();
SearchTree[++count1] = new OneState(mid1);
SearchTree[count1].setParent(0);
SearchTree[count1].setLayer(1);
SearchTree[count1].setId(1);
SearchTree[count1].setOperate(operator.PQ);
while (!Open.IsEmpty()) {
p = new OneState(Open.DeQueue());
mid4 = p.state.b;
// System.out.println(mid4);
switch (mid4) {
case 1: {
if (Take.P01(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.P01);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.Q01(p);
// System.out.println(count1);
}
} else
Take.Q01(p);
}
if (Take.P10(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.P10);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.Q10(p);
// System.out.println(count1);
}
} else
Take.Q10(p);
// break;
}
if (Take.P11(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.P11);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.Q11(p);
// System.out.println(count1);
}
} else
Take.Q11(p);
// break;
}
if (Take.P02(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.P02);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.Q02(p);
// System.out.println(count1);
}
} else
Take.Q02(p);
// break;
}
if (Take.P20(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.P20);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.Q20(p);
// System.out.println(count1);
}
} else
Take.Q20(p);
// break;
}
if (flag)
break;
}// case1
case 0: {
// System.out.println(count1);
if (Take.Q01(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.Q01);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.P01(p);
}
} else
Take.P01(p);
// break;
}
if (Take.Q10(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.Q10);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.P10(p);
}
} else
Take.P10(p);
// break;
}
if (Take.Q11(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.Q11);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.P11(p);
}
} else
Take.P11(p);
// break;
}
if (Take.Q02(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.Q02);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.P02(p);
}
} else
Take.P02(p);
// break;
}
if (Take.Q20(p)) {
if (Take.notContain(p, SearchTree, count1)) {
p.setParent(p.getId());
p.setLayer(p.getLayer() + 1);
p.setId(++count1);
p.setOperate(operator.Q20);
SearchTree[count1] = new OneState(p);
if (Take.stateCompare(p, y)) {
flag = true;
break;
} else {
Open.EnQueue(SearchTree[count1]);
Take.Q20(p);
}
} else
Take.P20(p);
// break;
}
if (flag)
break;
}// case0
default:
break;
}// switch
if (flag) {
// Open.DestoryQueue();
break;
}
}// while
if (Open.IsEmpty() && flag == false)
System.out.println("本方法没有找到可达路径,请使用其他方法,或改变算法结构!");
else {
for (int i = count1; i > 0;) {
Close.Push(SearchTree[i]);
i = SearchTree[i].getParent();
}
// System.out.println(Close.PoP().state.c);
String str = "输出修道士与野人问题的广度搜索路径如下:\n\n";
str += "步 \t 骤:左( M, C,B )\t执 行 操 作 \t\t状态:左(M, C,B )\n\n";
OneState q = new OneState();
while (!Close.IsEmpty()) {
p = Close.PoP();
if (p.getParent() == 0)
str += "第 " + p.getLayer() + "\t步 : ("
+ p.state.m + ", " + p.state.c + ", "
+ p.state.b + ")\t";
else if (p.getId() == count1)
str += "执行" + p.getOperator() + "操作 \t--->\t状态:左("
+ p.state.m + ", " + p.state.c + ", "
+ p.state.b + ")\n";
else
str += "执行" + p.getOperator() + "操作 \t--->\t状态:左("
+ p.state.m + ", " + p.state.c + ", "
+ p.state.b + ")\n" + "第 " + p.getLayer()
+ "\t步: (" + p.state.m + ", " + p.state.c
+ ", " + p.state.b + ")\t\t";
}
str += "共执行" + Integer.toString(p.getLayer() - 1) + "层"
+ p.getId() + "个状态的搜索。";
System.out.println(str);
}
}// else
// System.out.println(count1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -