2013-04-08 91 views
1

請在這裏找到貼有以下文件(1)節點2)主3)圖表):什麼是(Node)nodes.get(j))在Graph文件中的含義?

https://www.dropbox.com/sh/at9u2684k345uv0/dK77w58rEM

基本上我實現BFS與DFS和有關於圖形文件的一些代碼的一些問題:

private Node getUnvisitedChildNode(Node n) 
{ 

    int index=nodes.indexOf(n); 
    int j=0; 
    while(j<size) 
    { 
     if(adjMatrix[index][j]==1 && ((Node)nodes.get(j)).visited==false) 
     { 
      return (Node)nodes.get(j); 
     } 
     j++; 
    } 
    return null; 
} 

誰能告訴我這是什麼

(Node)nodes.get(j)) 

意思嗎?

我有幾個問題:

在BFS()在圖形類方法,我有以下問題:

1)正如我理解的是

"Queue<Node> q=new LinkedList<Node>();" 

裝置鏈表實現隊列。因此,在這種情況下爲什麼需要LinkedList,我們不能通過「Queue q = new Queue()」來做到這一點嗎?「 ?

2)雖然我已閱讀的使用關鍵字「this」很多時候,任何人都可以請解釋爲什麼

q.add(this.rootNode)被使用,爲什麼不乾脆q.add(根節點)?

3)以下行代表什麼?

while((child=getUnvisitedChildNode(n))!=null) 

感謝

回答

2

如果在Graph類看,你會看到這樣的聲明:

public ArrayList nodes = new ArrayList(); 

這使用ArrayList類型,但不使用泛型(其中,方式,是一個壞主意)。的代碼

((Node)nodes.get(j)).visited 

行意味着:

  1. 獲取的nodesArrayListj th元素。由於ArrayList未使用泛型,因此返回Object類型的對象。
  2. 將該對象投射到Node,這就是該對象的真實含義。
  3. Node內查找visited字段。

換句話說,這意味着「查找存儲在nodes列表中的位置jNode,然後讀取其visited場。

所有這一切都可以很容易避免,如果作者使用泛型與ArrayList,如

public ArrayList<Node> nodes = new ArrayList<Node>(); 

如果是這樣的話,代碼查找一個節點,並閱讀其visited場也只是

nodes.get(j).visited 

希望這會有所幫助!

+0

感謝您指出。其實我只在我的Eclipse IDE中使用泛型,刪除(Nodes)是有意義的,並增加了代碼的清晰度。感謝您的輸入。 – Adarsh 2013-04-08 05:57:23

+0

所以換句話說,考慮泛型和代碼「nodes.get(j).visited」,它表示: 1)獲取節點arraylist的第j個元素並檢查被訪問的布爾變量是否爲false。 – Adarsh 2013-04-08 05:59:34

相關問題