2

我正在尝试对图形进行建模以解决一些连接时间问题。例如,我有以下图表

    F1,F2     F3     F4

ST_B--------->ST2----->ST3------>ST_E

   F5,F6      F7       F8

ST_B-------->ST4---->ST5----->ST_E

    F9

ST_B-------->ST_E

我将 ST_B、ST2、ST3、ST4、ST5、ST_E 建模为站(节点)。F1-F9 作为 flt 节点。并且每个 flt 节点都有一个出发时间和到达时间。并且关系是连接的。同样在这种情况下,我们假设 F2 到达时间比 F3 出发时间少 30 分钟,F6 比 F7 少 30 分钟。(表示连接无效) 所以从ST_B 到ST_E 的有效路径应该是F1-F3-F4、F5-F7-F8 和F9。我尝试使用 cypher 来解决这个问题,但没有成功。(可能是我建模错了)。

4

1 回答 1

4

我为节点添加了标签以区分航班和车站。所有 F1-F9 航班都标有 :Flight,所有车站 ST_B、ST_E 和 ST_2-ST_5 都标有 :Station。

Match path=stb:Station-[:Connect*]->ste:Station
Where stb.name='ST_B' and ste.name='ST_E'
With filter(x in nodes(path) where x:Flight ) as flts
Where all ( i in Range(0,length(flts)-2) Where flts[i].arrvTime < flts[i+1].dptrTime)
Return extract(flt in flts | flt.name)
  1. “Match”和“Where”子句检索从 ST_B 到 ST_E 的所有路径;
  2. “With”子句检索路径上的所有飞行节点并将它们传递给下一个“Where”子句。
  3. 下一个“Where”子句检查每个航班的到达时间和连接航班的出发时间,以仅返回有效的航班组合。
  4. 最后的“Return”子句返回构成有效航线的航班名称。
于 2013-09-21T03:19:00.830 回答