Algorithm 图连接算法中的邻居节点查找

Algorithm 图连接算法中的邻居节点查找,algorithm,data-structures,graph,nodes,Algorithm,Data Structures,Graph,Nodes,我正在解决一个路径查找问题。我有一个由均匀分布的节点组成的二维网格。我需要一个算法来找到每个节点的所有8个邻居(如果它们存在的话),这样我就可以找到所有的邻居连接 我知道的唯一方法是这样: for each node for every other node check position to find if it is neighboring if so add it to the nodes connection list 我担心的是这将是非常低效的O(n^2),我想有更好的方

我正在解决一个路径查找问题。我有一个由均匀分布的节点组成的二维网格。我需要一个算法来找到每个节点的所有8个邻居(如果它们存在的话),这样我就可以找到所有的邻居连接

我知道的唯一方法是这样:

for each node
 for every other node
     check position to find if it is neighboring if so add it to the nodes connection list
我担心的是这将是非常低效的
O(n^2)
,我想有更好的方法来解决它


任何帮助都会很好

一个简单的选择是将节点本身存储在一个二维数组中,该数组由节点的x和y坐标索引。这样,您就可以通过索引数组并查看其中的内容,对存储在位置(x,y)的节点进行O(1)随机访问

可选地,如果您的节点是稀疏的,可以考虑将节点存储在由(x,y)位置键入的哈希表中。这也使得O(1)随机访问给定位置的节点,通过一个简单的双for循环,您可以列出所有八个邻居


希望这有帮助

一个简单的选择是将节点本身存储在一个二维数组中,该数组由节点的x和y坐标索引。这样,您就可以通过索引数组并查看其中的内容,对存储在位置(x,y)的节点进行O(1)随机访问

可选地,如果您的节点是稀疏的,可以考虑将节点存储在由(x,y)位置键入的哈希表中。这也使得O(1)随机访问给定位置的节点,通过一个简单的双for循环,您可以列出所有八个邻居


希望这有帮助

它只是一个节点数组,每个节点都有一个x和y。如果一个好的方法需要另一种存储节点的方式,那也可以。@templatetypedef这篇文章真的需要一个2D标记吗?我很抱歉-我的印象是2D是一般二维对象的标记,而不是二维图形。我已经相应地去掉了标签。对不起@templatetypedef没问题,我只是觉得很有趣,在看了之后,你们努力编辑了它,虽然我确实看到你们添加了有用的数据结构,它只是一个节点数组,每个节点都有一个x和y。如果一个好的方法需要另一种存储节点的方式,那也可以。@templatetypedef这篇文章真的需要一个2D标记吗?我很抱歉-我的印象是2D是一般二维对象的标记,而不是二维图形。我已经相应地去掉了标签。对不起@templatetypedef没问题,我只是觉得你努力编辑它很有趣,在看了之后,虽然我确实看到你添加了有用的数据结构x和y存储为浮点数,但是我的循环和节点位置的浮点数有时可能会以不同的方式散列吗?(如果是这样,为了安全起见,我只需将其转换为int)如果将它们存储为浮点数,则可能需要以完全不同的方式执行此操作。为什么它们存储为浮动?什么算是“邻居”呢?如果它简化了流程,我可以避免浮动solution@JustinMeiners-如果所有东西都有整数位置,我强烈建议使用整数。如果您使用的是可以放置在实值位置的更通用的节点,我可以建议使用一种更强大的数据结构来处理它。x和y存储为浮点,是否可能我的循环和节点位置中的浮点有时散列不同?(如果是这样,为了安全起见,我只需将其转换为int)如果将它们存储为浮点数,则可能需要以完全不同的方式执行此操作。为什么它们存储为浮动?什么算是“邻居”呢?如果它简化了流程,我可以避免浮动solution@JustinMeiners-如果所有东西都有整数位置,我强烈建议使用整数。如果您使用的是可以放置在实值位置的更通用的节点,我可以建议使用一种更强大的数据结构来处理这种情况。