如何仅使用深度优先搜索来获取相邻顶点?
我使用深度优先搜索算法来搜索有向图,我的问题是我想让它只返回我的起始顶点的邻居,而是继续进行直到它到达死胡同。
所以我想说我有顶点(A,B,C,D) 和边缘((A - > B),(A - > C),(C - > D)) 我想要所有邻居的顶点A,而不是得到B和C它也包括D,即使D不与A相邻?
public void dfs(int x) // depth-first search
{ // begin at vertex 0
vertexList[x].wasVisited = true; // mark it
displayVertex(x); // display it
theStack.push(x); // push it
while( !theStack.isEmpty() ) // until stack empty,
{
// get an unvisited vertex adjacent to stack top
int v = getAdjUnvisitedVertex( theStack.peek() );
if(v == -1) // if no such vertex,
theStack.pop();
else // if it exists,
{
vertexList[v].wasVisited = true; // mark it
displayVertex(v); // display it
theStack.push(v); // push it
}
} // end while
// stack is empty, so we're done
for(int j=0; j<nVerts; j++) // reset flags
vertexList[j].wasVisited = false;
} // end dfs
// ------------------------------------------------------------
// returns an unvisited vertex adj to v
public int getAdjUnvisitedVertex(int v)
{
for(int j=0; j<nVerts; j++)
if(adjMat[v][j]==1 && vertexList[j].wasVisited==false)
return j;
System.out.println("Found unvisited vertex");
return -1;
} // end getAdjUnvisitedVertex()
我知道我可以在创建它时存储Vertex的邻居但是这意味着如果我不得不在将来进行更改,我将不得不做出很多更改,如果有人对如何引导我有任何想法在正确的方向,我将非常感激!!
答案 0 :(得分:1)
如果您将图表表示为adjecency矩阵,那么您应该只从对应于顶点A的行中获取非零的所有条目。
for(int j=0; j<nVerts; j++)
if(adjMat[v][j]==1) System.out.println("vertex " + j);
所以你不需要dfs。