【发布时间】:2013-12-27 07:13:16
【问题描述】:
我在 DFS java 实现中卡在一行中间:如何表达“双端队列/堆栈中的顶点?”
我需要在for循环中写一行来表示顶点“u”在双端队列/堆栈中。初始值为“toExplore”的第一项。
下面是我的代码:
public List<Integer> DepthFirstList(Integer v)
{
List<Integer> vertices = new ArrayList<Integer>();
Deque<Integer> toExplore = new ArrayDeque<Integer>(); //The deque,used as the stack in DFS
List<Integer> visited = new ArrayList<Integer>();
toExplore.push(v);
visited.add(v);
while(!toExplore.isEmpty())
{
boolean hasNeighbor=false;
for()//To be more precise, u should be a vertex never visited. How can I make this change?
{
if(g.hasEdge(v, u))
{
toExplore.push(u);
visited.add(u);
hasNeighbor=true;
break;
}
}
if(hasNeighbor==false)
{
toExplore.pop();
vertices.add(v);
}
else hasNeighbor=false;
}
return vertices;
}
【问题讨论】:
-
v = toExplore.pop(),然后从v开始循环。是否有某种getAllEdges或getAllNeighbours功能? -
你最好维护一个单独的
Set访问的顶点。 -
@Dukeling 有一个名为
TreeMap<Integer,Integer> getAdjList(Integer v)的函数,它返回特定顶点的邻接列表。 -
TreeMap究竟包含什么?我认为v,u对应每个邻居u,但这不可能,因为每个条目都会相互覆盖(因为它是Map)。 -
@Dukeling 只有一行代码
return adjList.get(v)。adjList是一个私有变量,定义为adjList = new ArrayList<TreeMap<Integer, Integer>>(); for (int i=0; i<numVertices; i++) { adjList.add(new TreeMap<Integer, Integer>());
标签: java algorithm stack depth-first-search