我目前正致力于Dijkstra的最短路径问题。我在这个项目中没有什么特别的,算法是标准的(用一组对实现),除了我需要打印从一个顶点到另一个顶点的边缘类型。
想象一下,我有4个顶点和5个边。存在一对顶点p(v1,v2),使得存在连接v1和v2的2个或更多个边。例如,我们想找到从伦敦到巴黎的距离。我们知道我们都可以开车(一种边缘)或者我们可以买机票(另一种类型的边缘)。我想要做的是打印边缘类型。
实施例: 我有两种方式从伦敦到达巴黎: 伦敦 - >加来 - >巴黎,最少5小时,开车; 伦敦 - >巴黎,最短时间1小时,乘飞机。
我确切地知道,如何打印最小时间或最小距离,如何打印路径等。但是,如何打印边缘类型(运输类型),例如“乘飞机”或“乘车” ?这是我试过的:
struct neighbor {
int target_vertex;
double weight;
int type;
// for type: 0 - car
// 1 - bus
// 2 - plane
};
但是,我还是想不通,在计算最短路径时如何存储这些边缘'类型'。
此处代码:https://gist.github.com/anonymous/5943c448e47ebf0d3964baa53361459d
答案 0 :(得分:0)
您已拥有此信息,它存储在prev_type[x]
数组中。此数组包含您用于到达最终节点transport
的{{1}}类型。它与数组t
结合使用,后者记住父节点或从中到达当前节点的节点节点。因此,您从prev[]
(最终节点)开始并致电t
以获取其父级,而prev[t]
将包含用于到达prev_type[t]
的传输类型。继续这种方式返回,直到到达t
(开始)节点。
答案 1 :(得分:0)
解决了这个问题,从一个城市到另一个城市(基本上 - 城市的所有组合)预先定义了所有可能的风景。
c.ReceivedDate BETWEEN DATEADD(dd,-7, GETDATE()) AND getdate()
from =起始城市。
to =我们前往的目的地。
我确信解决方案不是最好的解决方案,但对于具有少量节点和边缘的特定情况,它是适用的。