从未加权图形打印最短路径

时间:2016-10-18 15:46:09

标签: c++ algorithm graph breadth-first-search

我有一个定向图表示为邻接列表:

enter image description here

class Graph
{
    private:
        struct Node
        {
            Node *next;
            int vertex;
            Node( int vertex )
            {
                this -> vertex = vertex;
                this -> next = nullptr;
            }
        };

        Node ** graph;
        int V;

public:
    Graph(int size)
    {
        V = size;
        graph = new Node*[V];
        for ( int i = 0; i < V; i++ )
            graph[i] = nullptr;
    }

   // Add edge from Source to destination
   void addEdge( int source, int destination )  
   {
      Node * ref = graph[from];
      graph[from] = new Node( to );
      graph[from] -> next = ref;
   }

  void bfs ( int s, int dest )
  {
   // ...
  }

我已经实现了bfs,它提供了从节点A到节点B的最短路径,但我不知道如何有效地保存该路径然后打印它。知道怎么解决吗?

1 个答案:

答案 0 :(得分:3)

如果从节点A开始执行BFS,则您访问的所有节点可能有多个子节点,但每个节点只有一个父节点。当您浏览图表时,只需保存您访问的每个节点的父节点(尚未访问过的节点)。

当您发现节点B只查找其父节点,然后查找其父节点的父节点,依此类推。这为您提供了路径。