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();
}
}// 符合操作
}
}
}