C# 从对象字典创建邻居列表

C# 从对象字典创建邻居列表,c#,xna-4.0,monogame,nearest-neighbor,neighbours,C#,Xna 4.0,Monogame,Nearest Neighbor,Neighbours,大家好,我要问一件关于游戏的事情。我很想在某个地方找到这样的例子。 以下是我们拥有的对象: public class Gate { public int MapID; //where gate located. public int ToMapID;//destination. } public class Map { public int MapID; public string Map; public List<Gate> gates; //list of o

大家好,我要问一件关于游戏的事情。我很想在某个地方找到这样的例子。 以下是我们拥有的对象:

public class Gate
{
  public int MapID; //where gate located.
  public int ToMapID;//destination.
}
public class Map
{
  public int MapID;
  public string Map;
  public List<Gate> gates; //list of our gates!
}

public static class MapsManager
{
   //here the list of our maps.
   public static Dictionary<int, Map> Maps
} 
主要目标是为这些地图创建一个邻居列表并对其进行操作。用于修补查找的地图的地图。 他们的连接是基于门的。诸如此类:

在这个原因中,如何从MapID到MapID获取门列表?例如: 我们有一张地图:

我们如何从S5到达S4?函数应返回一个包含2个Gate对象的列表,即我们的方式:

但我完全缺乏如何在代码中制作它们的想法。。。 在整个互联网上,有很多基于平铺的地图的例子,但遗憾的是,没有一个例子适用于这些类型的地图


致以最良好的祝愿。谢谢你的建议

搜索图搜索算法-Eric Lippert刚刚做了一系列关于图遍历的工作,您可能会发现这些工作很有帮助:是的,我们看到了它们,但在这方面没有太多帮助。这里的NuGets+链接用于4个侧面NSEW。例如,如果我们在一个扇区内有6-8个门怎么办?它们看起来更像是预定义的路由,而不是补丁查找。对不起,我不理解你的评论。大门的数量到底有什么关系?这是一个任意的图形搜索,一次可以链接100个门。你最后的评论,关于“预定义”路线,你是说你想拥有预定义的最佳路线吗?嗯,我会更深入地检查。但是Nuget…本地示例如何?关于路线-所有可能路线中的较短路线。是的,但A*星的性能更好。在此之前,我应该创建一个实现这些算法的东西。另一个问题是性能。试想一下,500-600个扇区,大约200个AI NPC补丁查找查询在某个时候会导致延迟。这个问题很难回答。99.9%的A*或Dijkstra的公共示例都是为基于分幅的地图编码的,这些地图具有可行走和不可行走的分幅。不适用于非平铺贴图。对于非平铺的、基于节点邻居的映射,没有一个示例,这不仅仅是因为补丁查找。