2013-04-07 55 views
1

我是新來的鏈接數據結構,並想知道如何創建一個無向圖,當從2d數組給出2點並且沒有權重之間的點確定。我搜查了四周,無法找到我正在尋找的東西。從數組創建鏈接的數據結構

例子:

int[][] points = { { 0, 1 },{ 0, 2 },{ 1, 2 },{ 1, 3 },{ 3, 4 } }; 

拉出它應該是這樣的。

 0 
     | 
    ------- 
    |  | 
    1-----2 
    | 
    3-----4 

編輯

我也希望能夠找到從0到4穿越到每個點,同時至少一次計數沿途每個動作的最短路徑。有可能你不得不倒退。在上面的例子中,從0到4的最短路徑是(0-2)(2-1)(1-3)(3-4)並且計數爲4個移動。

+1

我想通過實際考慮你想要什麼數據結構,落得和寫作至少一個虛擬實現啓動。圖表有幾種可能的表示形式,它們可以用不同的方式實現,所以目前還不清楚你想要構建哪一個。 (例如,你原來的'int [] []'已經是一個非常有效的圖形數據結構。) – millimoose 2013-04-07 22:00:30

+0

你想讀取一個邊界列表嗎?進入什麼結構? – 2013-04-07 22:00:57

+0

我剛編輯我的問題。應該更清楚我正在嘗試做什麼。 – mjenkins2010 2013-04-07 22:05:48

回答

2
  1. 創建一個類節點包含
  2. 迭代通過在陣列的節點相鄰節點的列表。爲每個節點創建一個節點對象,你覺得(可能會更好,讓他們在開始時的地圖。
  3. 迭代一次,並填補了相鄰節點列表中的每個節點。

考慮這個類節點:

public class Node { 
    private int id; 
    private List<Node> adjacentNodes = new ArrayList<Node>(); 

    public List<Node> getAdjacentNodes() { 
     return adjacentNodes; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

而且此方法創建的所有節點的集合和他們聯繫在一起:

private static Collection<Node> createGraphNodes(int[][] pointsMatrix) { 
    Map<Integer, Node> nodes = new HashMap<Integer, Node>(); 
    for(int[] points: pointsMatrix) { 
     for(int point: points) { 
      if(nodes.containsKey(Integer.valueOf(point))) { 
       continue; 
      } 

      Node node = new Node(); 
      node.setId(point); 
      nodes.put(point, node); 
     } 
    } 

    for(int[] points: pointsMatrix) { 
     int nodeId1 = points[0]; 
     int nodeId2 = points[1]; 

     Node node1 = nodes.get(Integer.valueOf(nodeId1)); 
     Node node2 = nodes.get(Integer.valueOf(nodeId2)); 

     node1.getAdjacentNodes().add(node2); 
     node2.getAdjacentNodes().add(node1); 

    } 

    return nodes.values(); 
+0

我爲此付出了很多努力,所以如果有幫助,請不要忘記接受。謝謝! – Avi 2013-04-07 22:20:33

+0

有沒有一種方法可以像我在編輯中解釋的那樣在節點之間找到路徑?對此,我真的非常感激。 – mjenkins2010 2013-04-07 22:32:01

+0

你正在尋找的路徑算法聽起來像對我來說是一個不同的問題。如果我是你,我會打開另一篇文章。 – Avi 2013-04-07 22:35:30

2

來表示圖中的最簡單的方法是使用鄰接矩陣,這是在其中行和列表示圖中的節點的二維布爾矩陣,並如果它們連接在一行和一列之間的交叉點。它包含一個,否則連接爲零。

例如您的上圖是:

 0 1 2 3 4 
0 [0] [1] [1] [0] [0] 
1 [1] [0] [1] [1] [0] 
2 [1] [1] [0] [0] [0] 
3 [0] [1] [0] [0] [1] 
4 [0] [0] [0] [1] [0] 
+0

不應該array [1] [3]與array [3] [1]有相同的[1]嗎?和數組[3] [0]是0?我只是問問。 – mjenkins2010 2013-04-07 22:15:53

+0

是的,糾正它。 – 2013-04-07 22:32:06

+0

我將如何去走過這條路並計算每一步?抱歉。可能是一個愚蠢的問題。我只是不明白我將如何在代碼中實現。 – mjenkins2010 2013-04-07 22:41:16