問題是使用bfs函數來構建/找到peg solitare遊戲的解決方案。給你一個包含開始狀態的節點,從這個狀態開始,節點擴展到更多的狀態(它的子節點)。一旦找到包含目標狀態的節點,函數應該停止。BFS函數的正確性?
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();
}
展開函數,根據下一個可能的棋盤狀態啓動childs鏈表並創建子節點。
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));}
}
我跑了代碼,並改進了好幾次。一旦隊列達到300萬以上,由於空間不足而崩潰。我的問題是:這最終會起作用嗎?代碼是否正確?
這是我的第一篇文章,很抱歉,如果我吮吸格式化問題很好。 謝謝。