0

假设我有顶点A, B, C, D, E, F,的图GX并且它们使用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 ]
4

1 回答 1

3

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

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')
于 2020-08-13T11:03:37.687 回答