Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅使用深度优先搜索获取相邻顶点_Java_Graph_Depth First Search_Vertex - Fatal编程技术网

Java 仅使用深度优先搜索获取相邻顶点

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

如何仅使用深度优先搜索获取相邻顶点

我使用深度优先搜索算法来搜索一个有向图,我的问题是,我想让它只返回起始顶点的邻域,而不是继续搜索,直到到达一个死胡同

假设我有顶点(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()
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您的描述是正确的,当然--
从行中获取所有非零的条目…