【发布时间】:2017-01-03 06:23:19
【问题描述】:
我尝试实现 A*_search_algorithm 但在运行时 搜索方法返回 null 我看到如果一个 curr 节点只有一个已经访问过它的邻居从循环中退出 我需要添加哪个条件来修复算法??
public Solution search(Searchable s) {
final StateT start = s.getInitialState();
final StateT goal = s.getGoalState();
initPriority(goal);
start.setCost(0);
openList.add(start);
double tempCost;
while (!(openList.isEmpty())) {
StateT curr = openList.poll();
numOfSteps++;
if (curr.equals(goal))
return backTrace(curr);
closedState.add(curr);
ArrayList<StateT> successors = s.getAllPossibleStates(curr);
for (StateT stateT : successors) {
}
for (StateT successor : successors) {
tempCost = curr.getCost() + s.dist_between(curr, successor);
if (closedState.contains(successor))
continue;
if (!(openList.contains(successor)))
openList.add(successor);
else if (tempCost >= successor.getCost())
continue;
successor.setCameFrom(curr);
successor.setCost(tempCost);
openList.remove(successor);
openList.add(successor);
}// for
for (StateT stateT : openList) {
System.out.println("op: "+stateT.getState());
}
System.out.println("end");
}
return null;
}//
public abstract void initPriority(final StateT goal);
public Solution backTrace(StateT current) {
Solution solution = new Solution();
while(current != null){
solution.getPath().add(current);
current = (StateT) current.getCameFrom();
}
return solution;
}
}
【问题讨论】:
标签: java search a-star breadth-first-search