在VS里用Nuget下载"Dijkstra.NET"库,然后就可以在需要的地方使用了。
首先,这是一个简单的graph,5个节点,7条边。
上代码
移动端看不清楚的可以看下面的:
Graph<int, string> graph = new Graph<int, string>(); graph.AddNode(1); // 添加节点1 graph.AddNode(2); // 添加节点2 graph.AddNode(3); graph.AddNode(4); graph.AddNode(5); graph.Connect(1, 2, 4, "some custom information in edge"); // 添加节点1和2的边长(即成本)5,并添加描述信息 graph.Connect(2, 4, 1, "some custom information in edge"); graph.Connect(1, 4, 2, "some custom information in edge"); graph.Connect(2, 3, 4, "some custom information in edge"); graph.Connect(3, 4, 1, "some custom information in edge"); graph.Connect(3, 5, 3, "some custom information in edge"); graph.Connect(4, 5, 7, "some custom information in edge"); // graph.Connect(4, 3, 1, "some custom information in edge"); // 注释这一句就会变成1 4 5 不注释就是 1 4 3 5 // 证明这个算法只能算有向图 ShortestPathResult result = graph.Dijkstra(1, 5); // 从图中获取节点1和2的最短路径 IEnumerable<uint> path = result.GetPath();// 返回所需走过的节点列表 foreach (var item in path) { System.Console.WriteLine(item);// 结果是 1 4 5 -> 因为4~3没有距离 }
基本不需要解释了
发现的问题
第一,这个算法只能解决有向图的最短路径;
第二,计算结果返回的是节点号?不太清楚
第三,没有提供邻接矩阵的接口,输入数据也比较麻烦