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

时间:2013-12-14 18:38:44

标签: java graph edge 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 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的邻居但是这意味着如果我不得不在将来进行更改,我将不得不做出很多更改,如果有人对如何引导我有任何想法在正确的方向,我将非常感激!!

1 个答案:

答案 0 :(得分:1)

如果您将图表表示为adjecency矩阵,那么您应该只从对应于顶点A的行中获取非零的所有条目。

for(int j=0; j<nVerts; j++)
 if(adjMat[v][j]==1) System.out.println("vertex " + j);

所以你不需要dfs。