在节点之间存储成本

时间:2013-11-15 14:06:26

标签: c++ search vector matrix nodes

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

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

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

行和列是Cell的迷宫向量中的位置,vector<Cell*> neighbors定义此特定单元连接到哪个单元格,状态保持单元格的状态(访问,空等)。 / p>

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

例如:

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

迷宫[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矢量缺乏经验。

1 个答案:

答案 0 :(得分:2)

您是否无法使用自定义对象链接到另一个房间?例如:

struct Cell;

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

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

这样可以节省成本和电池而不用担心。唯一的缺点是您将每次成本存储两次(假设它是对称的),但在许多其他方法(包括矩阵)中也是如此。