我想實現一個使用遞歸方法的搜索算法。執行算法的Java遞歸
該算法應擴大startnode
到其相鄰節點,然後選擇具有最小成本的相鄰節點,然後將該成本添加到pathcost
(其最初是0),並且至少所選擇的成本的節點將變爲startnode
和繼續搜索再次遞歸直到找到goalnode
。
下面是我實現這種遞歸的代碼。這不是給我任何錯誤,但它並沒有給我預期的解決方案。 INSTEAD它增加了每個相鄰節點的成本(我只需要它添加最小成本節點)。我一直在努力去做,但似乎無法找到任何線索如何去做。
Queue<String> frontierNodes = new PriorityQueue<String>();
Queue<Node1> frontierCosts = new PriorityQueue<Node1>(); // here Node1 is class storing the start, end and cost of the map.
public void Search(Node1[] nodes, String startnode, String goalnode, int size, double pathcost){
for(int i=0; i<size;i++) {
if(startnode.equalsIgnoreCase(nodes[i].getStartNode())) {
frontierNodes.add(nodes[i].getEndNode());
frontierCosts.add(new Node1(nodes[i].getCost()));
System.out.println("Frontier Nodes are " +frontierNodes);
System.out.println("Path cost till now "+pathcost);
// Something should be implemented here to add only the least cost
pathcost += frontierCosts.peek().toCostString();
System.out.println("Path cost till now "+pathcost);
}
}
System.out.println("Expanding node... " +frontierNodes.peek());
//Recursive call
Search(nodes, frontierNodes.poll(), goalnode, nodes.length-(frontierNodes.size()), pathcost);
}
actuallly什麼應該是發生在這裏,探索的StartNode的所有鄰居,對它們進行比較,皮卡最低成本節點,並將它們添加到您的最終排名,這是回答你的問題 但不知何故,這並不看作是一個分cost tour algorithm – Vihar
比較成本的條件檢查在哪裏?您聲明您希望選擇最低成本,但我看不到任何比較節點成本的代碼。 – MadConan
其實我正在使用優先級隊列而不是檢查成本,以便我可以poll()/ peek()隊列頭(這是最便宜的)。這不工作嗎? :/ – Dee