这是许多现有算法的微小变化,因此拓扑排序似乎是最明显和最有效的答案。
让我们举一个例子来更清楚地解释我的意思。
我有一个DAG从顶点A开始,有5个顶点/节点到E.我想找到从A到E的最短路径,这样每个节点本身都与路径一起加权,在某些时候每个节点都有可能节点可以有超过1个加权值。节点可以有许多变量,例如x,y和z。这些输入基于某些偏好(例如用户偏好)进行加权。因此,我们可以比x或z更重要地加权,这考虑了"更短的"路径。
我附上了一张图片来解释我想做什么。实现这一目标的最佳方法是什么?向节点添加权重的原因是给定输入对特定节点的偏好。
在饼图中我们可以看到Y的权重最大,偏好率为50%,因此我们将Y * N,其中N是计算权重的数字。在附图中的D中,x,y z将是{1,0.6,0.3}
编辑:根据原始答案,更新说明。简化了图表并添加了一个新的饼图来解释权重。
答案 0 :(得分:0)
使用有向图,可以轻松处理节点上的权重。常见的方法如下:
现在,您已将问题缩小为常规问题中的最短路径问题。 DAG,你应该知道如何解决它。
您的问题中多个权重的含义尚不清楚,但有两种选择:
答案 1 :(得分:0)
Create Edge(String startPoint, string EndPoint, int distance, int [] valueOther) {
Distance=weight
ValueOther=Time{6am10, 6am30, 7am....}
weight = distance + timewait + valueOther
}