【发布时间】:2017-02-16 06:33:02
【问题描述】:
问题是使用 bfs 函数构建/找到 peg solitare 游戏的解决方案。给你一个包含起始状态的节点,从这个状态节点扩展成更多的状态(它的子节点)。一旦找到包含目标状态的节点,该函数应该停止。
public void search(){
bfs.add(StartGoal);
while(!bfs.isEmpty()) {
node = bfs.poll();
if(node.isGoal()){System.out.println("success"); return;}
node.expand();
for(MyNode m : node.childs){
if(!m.isGoal()){
m.setVisited();
bfs.add(m);}}
node.setVisited();
}
expand 函数,启动子链表并根据下一个可能的棋盘状态创建子节点。
public void expand(){
if(childs != null) return;//already expanded do nothing
else{
childs= new LinkedList<MyNode>();
for(BoardState b: state.nextStates())
childs.add(new MyNode(this, b));}
}
我运行了代码并对其进行了多次改进。一旦队列达到大小 3+ 百万,它会由于空间不足而崩溃。我的问题是:这最终会奏效吗?代码正确吗?
这是我的第一篇文章,如果我在很好地格式化问题时很抱歉。 谢谢。
【问题讨论】:
标签: algorithm breadth-first-search