【发布时间】:2014-04-17 03:58:29
【问题描述】:
我正在尝试用 JavaScript 为以下由节点组成的网络编写路由/路径查找算法。每个节点都有规则来管理它是否可以作为入口点、出口点和/或被遍历。
给定一个有效的入口点,我需要解决以下两个问题:
- 网络的有效和可用出口点是什么
- 一旦确定并选择了有效的出口点,最佳路线是什么(需要遍历的节点)
网络规则:
- 您只能输入具有入口点的节点,即节点 A、B C、D、E、F、G
- 您只能退出具有退出点的节点,即节点 B、C、E、F、G
- 行进方向由入口节点决定 - 这决定了您可以行进和退出的方向。 。例如。通过节点A进入时顺时针行驶和退出
- 进入网络后就不能改变方向。
我将网络表示为一个对象数组,数组中的每个对象代表网络上的一个节点。
var network = [{
id: 'A',
canBeEntry: true,
ifEntryRouteIs: 'CW',
isExitIfRouteIs: 'N/A',
neighbourCW: ['B'],
neighbourCCW: ['H']
}, {
id: 'B',
canBeEntry: true,
ifEntryRouteIs: 'CW&CCW',
isExitIfRouteIs: 'CW',
neighbourCW: ['C'],
neighbourCCW: ['A']
},
.
.
.
{
id: 'H',
canBeEntry: false,
ifEntryRouteIs: 'N/A',
isExitIfRouteIs: 'N/A',
neighbourCW: ['A'],
neighbourCCW: ['G']
}];
描述有效进入/退出节点、转换和权重的图表如下:
我对寻路和路由相关的算法(例如 Dijkstra 或 A* 搜索)做了一些或研究,但它们似乎基于成本和权重,我认为这不适用于我的网络。
有没有人对如何用 JavaScript 编写算法来首先确定出口点,然后是路线有任何想法或方法?
我试图在 JavaScript 中实现的 jsfiddle 在这里 http://jsfiddle.net/mkov/dgGHm/
【问题讨论】:
-
这似乎是一个竞争问题。 Dijkstra 实际上适用于您的情况,您的成本始终为 1
-
不是竞争问题。只是比我对一个项目的咀嚼还要多;)我想我理解 Dijkstra 可能如何协助路由,但是确定有效的退出点呢?我需要先执行此操作,以便为算法构建图表?
-
您需要一种算法来检查给定起始节点的出口点,以及另一种算法来获得起始节点和所选出口节点之间的最短路线。我不明白的是
ifEntryRouteIs:你怎么知道起始节点的方向? -
该项目涉及道路行程规划。并非所有节点都是网络的入口点,但对于我们可以进入的节点,我们可能只能沿一个方向行进,例如节点 A、C、G。类似地,我们可能只能从特定方向的某些节点退出。我已经知道每个节点的有效进出方向。
标签: javascript algorithm networking tree path-finding