我是cypher的新手并且一直在将它用于othello棋盘游戏逻辑。我一直在研究一个cypher查询,它将返回用户可以选择作为下一步的图块。
MATCH (g:Game)-->(empty:Tile)
WHERE g.uuid=' ' AND empty.disc='none'
WITH empty
MATCH (empty)-[direction]->(t:Tile)
WHERE t.disc = 'black'
WITH empty, direction.compass as path
MATCH p=shortestPath( (empty)-[direct:DIRECTION *]->(lastNode) )
WHERE lastNode.disc = 'white' AND direct.compass = path
RETURN empty, direct.compass
我得到的错误是在倒数第二行
"WHERE lastNode.disc='white' AND direct.compass=path"
其中direct
是关系的集合。我对这个集合并不感到惊讶,我想通过过滤罗盘属性来减少该集合,以确保所有关系都在同一方向。我该怎么做?
我认为上面的代码将游戏板上的所有“空”牌作为开始。接下来,过滤到与黑色瓷砖相邻的空白瓷砖。使用空白到黑色的连接,我希望确保在找到结束白色图块时所有关系都在同一方向,以使路径可翻转。
CREATE (g:Game { uuid: " ", player_color: "white", turn_count: "-1" })
CREATE (t0:Tile { idx: toInt(0), disc: "none" })
// Where the tiles idx[0..63] are created
CREATE (g)-[:OWNS]->(t0)
// WHERE the game owns 64 tiles idx[0..63]
CREATE (t0)-[:DIRECTION {compass:'e'}]->(t1)
// compass: ['n','ne','e','se','s','sw','w','nw']
// one relationship per direction, only to neighbors, if applicable.
// The edge of the board and corners have a subset of these.
如果需要,我可以提供整个电路板创建密码。
答案 0 :(得分:1)
我希望通过过滤罗盘属性来减少该集合 确保所有关系都朝着同一个方向。我该怎么办 是什么?
您正在寻找的是ALL
谓词。所以你需要告诉路径p
中的所有关系必须将属性罗盘赋予路径值:
WHERE ALL (x in rels(p) WHERE x.compass = path)
所以你的完整WHERE行将是
WHERE lastNode.disc='white' AND ALL (x in rels(p) WHERE x.compass = path)