请找到以下文件(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)
谢谢
答案 0 :(得分:2)
如果你查看Graph
课程,你会看到这个声明:
public ArrayList nodes = new ArrayList();
这使用ArrayList
类型,但不使用泛型(顺便说一下,这是一个坏主意)。代码行
((Node)nodes.get(j)).visited
表示以下内容:
j
nodes
的{{1}}元素。由于ArrayList
在没有泛型的情况下使用,因此会返回ArrayList
类型的对象。Object
,这就是该对象的真实含义。Node
。visited
字段
醇>
换句话说,这意味着&#34;在Node
列表中查找存储在Node
位置的j
,然后阅读其nodes
字段。
如果作者在visited
中使用泛型,则可以轻松避免所有这些,如
ArrayList
如果是这种情况,查找节点并阅读其public ArrayList<Node> nodes = new ArrayList<Node>();
字段的代码就是
visited
希望这有帮助!