C#最短路径算法:Dijkstra
C#的图算法里,Dijkstra算是老熟人了,找最短路径挺管用,思路也不绕。用 C#撸起来其实也不复杂,定义个节点类加上邻接表,逻辑就顺了。关键点就俩:一个是贪心地挑最近的节点,一个是用优先队列提高效率。写的时候注意下优先队列的使用,比如用PriorityQueue
,别忘了及时更新距离。
初始化部分挺简单,所有节点先设成无穷大,源点设 0,丢进队列。
distances[source] = 0;
queue.Enqueue(source, 0);
循环节点,每次取出当前最短的,如果没过,就拿它的邻居更新一波最短路径。
var newDistance = distances[currentNode.Id] + weight;
if (newDistance < distances[neighbor]) {
distances[neighbor] = newDistance;
queue.UpdatePriority(neighbor, newDistance);
}
这种方式在像地图导航、网络节点、甚至一些游戏路径规划时都蛮实用的。你要是做这类项目,手里没个Dijkstra真的不太踏实。
想看完整代码或者打包例子,可以去这些链接看看:
如果你刚好在用 C#写图相关的东西,又需要算最短路径,那这套Dijkstra实现还挺值得参考,逻辑清楚,结构也还行,改改就能用上。
下载地址
用户评论