Terminate when the outer loop sees an end node

pull/25/head
Wilfred Hughes 2021-06-30 23:14:19 +07:00
parent 132ab3bf7a
commit ab1edfe39a
1 changed files with 6 additions and 7 deletions

@ -118,9 +118,14 @@ fn find_route<'a>(start: GraphNode<'a>) -> Vec<GraphNode<'a>> {
let mut predecessors: HashMap<EqualityGraphNode, GraphNode> = HashMap::new();
let end;
'outer: loop {
loop {
match heap.pop() {
Some(ogn) => {
if ogn.gn.is_end() {
end = ogn.gn;
break;
}
let egn = EqualityGraphNode { gn: ogn.gn };
if visited.contains(&egn) {
continue;
@ -129,12 +134,6 @@ fn find_route<'a>(start: GraphNode<'a>) -> Vec<GraphNode<'a>> {
let gn = egn.gn;
for new_gn in next_graph_nodes(&gn) {
predecessors.insert(EqualityGraphNode { gn: new_gn.clone() }, gn.clone());
if new_gn.is_end() {
end = new_gn;
break 'outer;
}
heap.push(OrderedGraphNode { gn: new_gn });
}