Java 仅使用深度优先搜索获取相邻顶点
如何仅使用深度优先搜索获取相邻顶点 我使用深度优先搜索算法来搜索一个有向图,我的问题是,我想让它只返回起始顶点的邻域,而不是继续搜索,直到到达一个死胡同 假设我有顶点(A,B,C,D) 和边((A->B)、(A->C)、(C->D)) 我想要顶点A的所有邻域,而不是得到B和C,它也包括D,即使D与A不相邻Java 仅使用深度优先搜索获取相邻顶点,java,graph,depth-first-search,vertex,Java,Graph,Depth First Search,Vertex,如何仅使用深度优先搜索获取相邻顶点 我使用深度优先搜索算法来搜索一个有向图,我的问题是,我想让它只返回起始顶点的邻域,而不是继续搜索,直到到达一个死胡同 假设我有顶点(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
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()
public void dfs(int x)//深度优先搜索
{//从顶点0开始
vertexList[x].wasVisited=true;//标记它
displayVertex(x);//显示它
theStack.push(x);//推它
而(!theStack.isEmpty())//直到堆栈为空,
{
//获取与堆栈顶部相邻的未访问顶点
int v=getAdjUnvisitedVertex(theStack.peek());
if(v==-1)//如果没有这样的顶点,
theStack.pop();
否则//如果存在,
{
vertexList[v].wasVisited=true;//标记它
displayVertex(v);//显示它
(v);//推它
}
}//结束时
//堆栈是空的,所以我们完成了
对于(int j=0;j如果您将图形表示为邻接矩阵,那么您应该只从对应于顶点A的行中获取所有非零的条目
for(int j=0; j<nVerts; j++)
if(adjMat[v][j]==1) System.out.println("vertex " + j);
for(int j=0;j如果将图形表示为邻接矩阵,那么应该只从对应于顶点A的行中获取所有非零的条目
for(int j=0; j<nVerts; j++)
if(adjMat[v][j]==1) System.out.println("vertex " + j);
用于(int j=0;ji如果你真的需要使用深度优先搜索,我会假设所有相邻顶点都有一定的深度,即当你到达它们时,堆栈有一定的大小。如果你真的需要使用深度优先搜索,我会假设所有相邻顶点都有一定的深度,即当你到达它们时,堆栈有一定的大小(对不起),但是,即使OP清楚地提到了他的设置,并且顶点之间的边数是1,在更一般的情况下,如果两个顶点之间有超过1条边,则上述代码将不起作用。例如,如果a->B和B->a使用不同的边,则它们共同的邻接矩阵项将有2条,而不是1条,并且如果条件为w您的描述是正确的,当然--
从行中获取所有非零的条目…
有点吹毛求疵(对不起),但是,即使OP清楚地提到了他的设置,并且顶点之间的边数是1,在更一般的情况下,如果两个顶点之间有超过1条边,则上述代码将不起作用。例如,如果a->B和B->a使用不同的边,则它们共同的邻接矩阵项将有2条,而不是1条,并且如果条件为w您的描述是正确的,当然--
从行中获取所有非零的条目…