⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test0.java

📁 自己编写的人工智能中野人与修道士问题的程序。
💻 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 + -