2013-11-15 69 views
1

我正在使用統一成本搜索來製作迷宮解算器,基本上我想要做的是在我的迷宮中存儲房間之間的隨機成本。房間節點之間的存儲成本

數據結構(命名爲細胞):

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

行和列是在Cell的迷宮矢量的位置,vector<Cell*> neighbors定義了哪些小區這個特定單元連接到與狀態保持一小區的狀態(已訪問,空白等)。

我所做的是製作Cell結構的屬性,如下所示:vector<int> cost其中該數組的每個元素都與鄰居元素相匹配。

例如:


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矢量經驗不足。

回答

2

難道你不能使用自定義對象來鏈接到另一個房間嗎?例如:

struct Cell; 

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

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

這將保持成本和細胞加上無後顧之憂。唯一的缺點是,你將存儲每個成本兩次(假設它是對稱的),但在許多其他方法(包括矩陣)中都是如此。

+0

看起來應該可以工作,讓我試試看,我會盡快回復您。 – Powerbyte

+0

它的工作,謝謝。 – Powerbyte