use crate::dial::{DialHandle, DialHeap};
use crate::dijkstra::heap_trait::PriorityQueue;
impl PriorityQueue for DialHeap {
type Handle = DialHandle;
fn insert(&mut self, key: u32, node_id: usize) -> Self::Handle {
DialHeap::insert(self, key, node_id)
}
fn extract_min(&mut self) -> Option<(u32, usize)> {
DialHeap::extract_min(self)
}
fn supports_decrease_key(&self) -> bool {
true
}
fn decrease_key(&mut self, handle: &Self::Handle, new_key: u32) {
DialHeap::decrease_key(self, handle, new_key);
}
}
pub fn dijkstra_dial(
start: usize,
end: usize,
graph: &[Vec<(usize, u32)>],
) -> (Vec<usize>, Option<u32>) {
let max_nodes = graph.len();
let initial_max_distance = 1000.min(max_nodes * 10);
crate::dijkstra::dijkstra(
start,
end,
graph,
DialHeap::new(max_nodes, initial_max_distance),
)
}