请在此处找到以下文件 (1) Node 2)Main 3) 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))
这里是什么意思?
我还有几个问题:
在 Graph 类的 bfs() 方法中,我有以下问题:
1) 据我了解
"Queue<Node> q=new LinkedList<Node>();"
表示 LinkList 实现了一个 Queue。
那么,为什么在这种情况下需要 LinkedList,我们不能通过“Queue q = new Queue();”来完成吗? ?
2)虽然我已经多次阅读“this”关键字的用法,但谁能解释一下原因
使用了 q.add(this.rootNode) 为什么不直接使用 q.add(rootNode) 呢?
3) 下面这行是什么意思?
while((child=getUnvisitedChildNode(n))!=null)
谢谢
最佳答案
如果查看 Graph
类,您会看到以下声明:
public ArrayList nodes = new ArrayList();
这使用了 ArrayList
类型,但没有使用泛型(顺便说一句,这是一个坏主意)。代码行
((Node)nodes.get(j)).visited
含义如下:
- 获取
nodes
ArrayList
的第j
个元素。由于ArrayList
未使用泛型,因此返回类型为Object
的对象。 - 将该对象转换为
Node
,这就是该对象的真实含义。 - 在该
Node
中查找visited
字段。
换句话说,这意味着“在nodes
列表中查找存储在位置j
的Node
,然后读取它的访问了
字段。
如果作者在 ArrayList
中使用泛型,那么所有这一切都可以轻松避免,如
public ArrayList<Node> nodes = new ArrayList<Node>();
如果是这种情况,查找节点并读取其 visited
字段的代码就是
nodes.get(j).visited
希望这对您有所帮助!
关于java - Graph 文件中的 (Node)nodes.get(j)) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872017/