繁体   English   中英

在节点之间存储成本

[英]Storing cost between nodes

我正在使用“统一成本搜索”制作迷宫求解器,基本上我想做的是在迷宫中的各个房间之间存储随机成本。

房间(命名单元)的数据结构:

struct Cell
    {
        int row;
        int column;
        vector<Cell*> neighbors;
        State state;
    };

row和column是Cell的迷宫向量中的位置, vector<Cell*> neighbors定义此特定单元格与哪个单元格连接,状态保持该单元格的状态(已访问,空等)。

我尝试做的是使Cell结构的属性如下: vector<int> cost ,其中数组的每个元素都与邻居元素匹配。

例如:

  012345
0 ######
1 #   ##
2 # #  #
3 ######

maze [1] [1]的邻居向量是:

neighbors[0] = *maze[1][2];
neighbors[1] = *maze[2][1];

现在的成本向量为:

cost[0] = 5;
cost[1] = 10;

但是,这样做的方式带来了很多问题。

我想到的是,我需要一个成本矩阵,该矩阵将一个节点与另一个节点匹配并将成本存储在矩阵中,如下所示:

  0  1  2 
0[0][2][4]
1[2][0][6]
2[4][6][0]

但是为了做到这一点,我如何使我的矩阵知道哪个单元格是哪个? 而不是0和1,我知道它是[0] [0] [0] [1] [0] [2]等

我是否需要将3D矢量用于这种情况? 如果我愿意,我宁愿避免使用它,因为我对3D向量没有经验。

您不能使用自定义对象链接到另一个房间吗? 例如:

struct Cell;

struct CellLink {
  const Cell *cell;
  const int weight;
  ..
};

struct Cell {
  int row;
  int column;
  vector<CellLink> neighbors;
  State state;
};

这将使成本和电池成本保持不变。 唯一的缺点是您将每个成本存储两次(假设它是对称的),但是在许多其他方法(包括矩阵)中也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM