如何减少一组顶点,直到每个顶点都不需要另一个

How to reduce a set of vertices until each vertex does not require an another

假设我有顶点为 ABCDEF、[=22 的图=], X 并且它们使用传出边 requires 连接,如下所示

A -> X
B -> A
C -> B
D -> C
D -> E
E -> X
F -> G
F -> X
G -> X

是否可以减少给定的一组顶点,直到集合中的每个顶点都不 require 另一个。例如:

input          = [ C ]
desired output = [ C ]
input          = [ A, B, C, D ]
desired output = [ A ]
input          = [ A, E ]
desired output = [ A, E ]
input          = [ A, D, E ]
desired output = [ A, E ]
input          = [ A, D, E, G, F ]
desired output = [ A, E, G ]

到目前为止,我已尽力而为,并得到了要忽略的项目。可能有人可以帮助我如何过滤查询本身的结果。

g.V().has('name', within('A', 'B', 'C', 'D')).
  aggregate('N').
  repeat(in().dedup()).
  until(has('name', within('A', 'B', 'C', 'D'))).
  aggregate('K').
  V().has('name', within('A', 'B', 'C', 'D')).
  where(without('K')).
  dedup().
  values('name')

您也可以使用问题https://gremlify.com/or7cziqjps

中给出的相同数据进行尝试

更新:添加了 Where 来过滤结果,但是,尝试进一步简化查询以提高效率。

为了让其他人更容易尝试更好的解决方案,发布查询以添加数据。

g.addV('node').as('1').
  property(single, 'name', 'A').addV('node').as('2').
  property(single, 'name', 'B').addV('node').as('3').
  property(single, 'name', 'C').addV('node').as('4').
  property(single, 'name', 'D').addV('node').as('5').
  property(single, 'name', 'E').addV('node').as('6').
  property(single, 'name', 'F').addV('node').as('7').
  property(single, 'name', 'G').addV('node').as('8').
  property(single, 'name', 'X').
  addE('requires').from('1').to('8').
  addE('requires').from('2').to('1').
  addE('requires').from('3').to('2').
  addE('requires').from('4').to('3').
  addE('requires').from('4').to('5').
  addE('requires').from('7').to('8').
  addE('requires').from('6').to('7').
  addE('requires').from('5').to('8')