BusinessManSearch.java
//商人过河的问题
//假如有三个商人各带一个随从要过河。只有一条船得需要他们划每次只能坐两个人,条件是任何一岸的随从多于商人时随从就会抢劫商人。
//请问这三个商人怎样才能安全过河?
//算法伪代码
//初始状态<3,3,0,0>
//最终状态<0,0,3,3>
//转化的方法或者手段有<1,0><0,1><1,1>
/*
BusinessManState state
Queue toVisit
add firstState to toVisit
while toVisit is not empty
current<-first node on toVisit
remove first node from toVisit
if current = goal
add current to alreadyVisited
return true
end if
for each child node C of current
add C to toVisit
end for
add current to alreadyVisited
end while
*/
import java.util.ArrayList;
import java.awt.Point;
import java.util.HashMap;
public class BusinessManSearch {
public void doSearch()
{
boolean result = false ;
ArrayList toVisit = new ArrayList();
HashMap alreadyVisit = new HashMap();
//1表示由此岸驶向对岸,而2表示由对岸驶向此岸,0则什么都不表示,或者说是专门表示首节点的父节点.
BusinessManState finalState = new BusinessManState(new Point(0,0),new Point(3,3),2);
BusinessManState firstState = new BusinessManState(new Point(3,3),new Point(0,0),1);
BusinessManState fatherState = new BusinessManState(new Point(0,0),new Point(0,0),0);
ArrayList child_father= new ArrayList();
child_father.add(firstState);
child_father.add(fatherState);
toVisit.add(child_father);
while(!toVisit.isEmpty()&&!result)
{
ArrayList current = (ArrayList)toVisit.get(0);
toVisit.remove(0);
BusinessManState currentState = (BusinessManState)current.get(0);
if(BusinessManState.equal(currentState, finalState))
{
String target = "&l