java - 使用 BFS 遍历 java 跟踪倒数第二项
问题描述
我可以通过将 q.poll 保存在 int 中来跟踪最后一项,但是如何使用此遍历跟踪倒数第二项?
public Integer breadthFirstTraversal(Integer v) {
Queue<Integer> q = new LinkedList<Integer>();
VertexIDList adjList;
q.add(v);
getVertex(v).setMarked();
while (!q.isEmpty()) {
v = q.poll();
adjList = getVertex(v).getAdjs();
Iterator<Integer> vIt = adjList.iterator();
while (vIt.hasNext()) {
Integer u = vIt.next();
if (!getVertex(u).isMarked()) {
q.add(u);
getVertex(u).setMarked();
}
}
}
// return second last item here
}
解决方案
修改方法签名并添加一个列表来存储路径。(size()-2
:last but 1)
public Integer breadthFirstTraversal(Integer v, List emptyList) {
//with intermediary vars
int last = 0;
int last1 = 0;
Queue<Integer> q = new LinkedList<Integer>();
VertexIDList adjList;
q.add(v);
getVertex(v).setMarked();
while (!q.isEmpty()) {
v = q.poll();
//store
emptyList.add(getVertex(v));
last1 = last;
last = getVertex(v);
//System.out.println(getVertex(v));
adjList = getVertex(v).getAdjs();
Iterator<Integer> vIt = adjList.iterator();
while (vIt.hasNext()) {
Integer u = vIt.next();
if (!getVertex(u).isMarked()) {
q.add(u);
getVertex(u).setMarked();
}
}
}
// return second last item here
return last1;
}
推荐阅读
- mysql - 如何在 laravel 邮件模板中发送数组变量?
- python - Python中的幻像参数
- angular - Bootstrap 的模态没有在 Angular 应用程序中弹出?
- kubernetes - Gridgain Partitions loss with node scale down
- webpack - 如何避免JS文件中捆绑三个以上的webpack
- docker - Airflow:在不同的 Docker 容器中触发 Spark
- grpc - 我可以定义一个 gRPC 非阻塞客户端调用,其中没有状态从服务器发送回客户端吗?
- python - matplotlib 数值被乱序绘制
- javascript - 尝试使用 onclick 调用函数
- javascript - 回调队列和事件队列有什么区别?