(Node)nodes.get(j))在Graph文件中的含义是什么?

时间:2013-04-08 05:43:57

标签: java algorithm graph

请找到以下文件(1)节点2)主要3)图表):

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))

在这里意味着什么?

我还有更多问题:

在Graph类的bfs()方法中,我有以下问题:

1)据我了解

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

表示LinkList实现了一个队列。

那么,为什么在这种情况下需要LinkedList,我们不能通过“Queue q = new Queue();”来做到这一点。 ?

2)虽然我已多次阅读“this”关键字的用法,但有人可以解释原因吗

使用q.add(this.rootNode),为什么不只是q.add(rootNode)?

3)以下行代表什么?

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

谢谢

1 个答案:

答案 0 :(得分:2)

如果你查看Graph课程,你会看到这个声明:

public ArrayList nodes = new ArrayList();

这使用ArrayList类型,但不使用泛型(顺便说一下,这是一个坏主意)。代码行

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

表示以下内容:

  1. 获取j nodes的{​​{1}}元素。由于ArrayList在没有泛型的情况下使用,因此会返回ArrayList类型的对象。
  2. 将该对象投射到Object,这就是该对象的真实含义。
  3. Node
  4. 中查找visited字段

    换句话说,这意味着&#34;在Node列表中查找存储在Node位置的j,然后阅读其nodes字段。

    如果作者在visited中使用泛型,则可以轻松避免所有这些,如

    ArrayList

    如果是这种情况,查找节点并阅读其public ArrayList<Node> nodes = new ArrayList<Node>(); 字段的代码就是

    visited

    希望这有帮助!