我正在用C#.NET编程。在实现Dijkstra算法时,通常使用优先级队列或堆来计算下一个要访问的节点。不幸的是,C#本身并不提供这些数据结构。我不能,我不想在数组上实现Dijkstra(这个更慢)。什么是最好的选择?
答案 0 :(得分:1)
有几种可用的.NET优先级队列实现,包括这个
http://www.itu.dk/research/c5/
PowerCollections提供了很多基类库中没有的集合类,不过这个答案中的注释
https://stackoverflow.com/a/102434/141172
表明PowerCollections中的优先级队列没有得到最佳实现。
答案 1 :(得分:1)
从.NET 2.0开始,您可以使用SortedDictionary<K,V>
来实现优先级队列。它的Keys
属性返回有序集合。您可以提取其第一个项目以获取表示“下一个最佳”边缘的条目的键。 V
必须是List<T>
,其中T
是您在Dijkstra队列中存储的元素。
答案 2 :(得分:1)
您可以查看此链接。它支持使用C# Generics