野人传教士过河

来源:互联网 发布:门户源码 编辑:程序博客网 时间:2024/05/17 02:28
package MBC;import java.util.Arrays;import java.util.Iterator;import java.util.LinkedList;import javax.crypto.Mac;class strack extends LinkedList {// 堆栈/** *  */private static final long serialVersionUID = 1L;public boolean isEmpty() {return super.isEmpty();}public Object pop() {if (!this.isEmpty())return removeFirst();return "null";}public void push(Object e) {super.addFirst(e);}}class left {int m;// 传教士int c;// 野人int b;// 船boolean flag = true;public int getM() {return m;}public void setM(int m) {this.m = m;}public int getC() {return c;}public void setC(int c) {this.c = c;}public boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}public int getB() {return b;}public void setB(int b) {this.b = b;}public left(int m, int c, int b) {super();this.m = m;this.c = c;this.b = b;}}public class MCB {public static void main(String[] args) {left[] all = new left[16];// 合法状态集合all[0] = new left(0, 0, 0);all[1] = new left(0, 1, 1);all[2] = new left(0, 2, 1);all[3] = new left(0, 3, 1);all[4] = new left(1, 1, 1);all[5] = new left(2, 2, 0);all[6] = new left(3, 1, 1);all[7] = new left(3, 2, 1);all[8] = new left(0, 1, 0);all[9] = new left(0, 2, 0);all[10] = new left(1, 1, 0);all[11] = new left(2, 2, 1);all[12] = new left(3, 0, 0);all[13] = new left(3, 1, 0);all[14] = new left(3, 2, 0);all[15] = new left(3, 3, 1);left start = all[15]; // 开始状态all[15].setFlag(false);boolean flag = false;strack strack = new strack();strack.push(all[15]);MCB test = new MCB();test.doit(strack, all);}void doit(strack st, left[] all) {Iterator s = st.iterator();left shang = null;shang = (left) st.getFirst();if (st.getFirst().equals(all[0])) {// 输出System.out.println("完成一个");left hh = null;while (s.hasNext()) {hh = (left) s.next();System.out.print(hh.getM() + " " + hh.getC() + " " + hh.getB()+ "   <-- ");}}for (int i = 14; i >= 0; i--) {if ((all[i].flag == true)// 符合操作&& (shang.getB() != all[i].getB())&& (shang.getC() + shang.getM() != all[i].getC()+ all[i].getM())&& (Math.abs(all[i].getM() - shang.getM())+ Math.abs(all[i].getC() - shang.getC()) <= 2)) {if ((all[i].getB() == 1 && ((all[i].getC() + all[i].getM()) > (shang.getC() + shang.getM())))|| (all[i].getB() == 0 && ((all[i].getC() + all[i].getM()) < (shang.getC() + shang.getM())))) {shang = all[i];all[i].flag = false;st.push(all[i]);doit(st, all);all[i].flag = true;st.pop();shang=(left)st.getFirst();}}// 符合操作}}}

原创粉丝点击