假設我想代表一個有100個樓層的10 * 10房間。我可以從任何一層開始穿過房間,但是,有些樓層之間有牆壁。 CS說,我正在試圖做一個10 * 10的網格房間,其中每個方格代表一個樓層。每個樓層都有一定的特徵,它可以表示爲一個節點,但整個網格包含這些節點的列表。什麼是鏈接網格正方形最有效的方法?
我試圖將每個方塊連接到與之相關的方塊。 這個關係可以描述如下: - 除了網格邊緣上的那個之外,每個正方形在頂部,右邊,上邊和下邊都有另一個邊。
例如,網格左上角的第一層只與右側的樓層和下面的樓層有關係。
- 另外,有些樓層不能連接在一起,假設它們之間有一個塊。樓層號前一個例子中的一個不能與它下面的鏈接,因爲它們之間有一堵牆。
我用一個指針到每個節點 - 方聯繫或落地式到其相關的節點:
public class Node{
private Node right;
private Node left;
private Node up;
private Node down;
//constructor other methods
}
然而,這種解決方案可能需要很多地方在內存中,假設我們有100個節點,每個節點有4個指針!
我已經通過爲每個節點分配ID來更改此解決方案,然後在每個節點中都有一個int []數組,可以存儲相關節點的數量。
該解決方案在網格類中引入了另一個問題! 假設改變後,在Node類的新方法將是:
public void setNeighbors(int[] neighbors) { this.neighbors = neighbors; }
正當我要創建的每個節點,將其添加到列表中網格類,我得寫100線,每個節點一個!
int [] n1 ={2}; grid.getEntry(1).setNeighbors(n1);
int [] n2 ={1,3}; grid.getEntry(2).setChars(n2);
.
.
.
And so on..
我的問題是,我該如何通過儘可能高效和乾淨的代碼來解決問題。
我怎樣才能代表靜態正方形之間的關係,而不必在每一步創建一個數組或不必寫100行。
我發現廣場之間的數學關係,但我不能使用它,因爲一些方格不能鏈接到ONSE旁邊,因爲他們之間的牆..
我看不出有什麼不對您發佈的節點類。它使遍歷非常容易。我猜可能很難填充。取決於一個節點是否需要知道它的鄰居是誰。我真的沒有看到你認爲你通過添加ID屬性而不是使用對象引用獲得了什麼。 – tom
我不喜歡400指針的想法。此外,我仍然必須做100行,但它看起來像這樣'grid.getEntry(2).setNeighbors(grid.getEntry(1),grid.getEntry(3),null,null);' – Lamia
「400指針的想法」遠遠好於創建400個ID(本質上是指針)並自己管理它們,這是您提出的替代方案。您可以將地板放在一個二維節點陣列中,在每個節點中創建一個乾淨的節點,然後遍歷指定左/右/上/下節點的數組。不需要100行代碼。 – tom