我有一个定向图表示为邻接列表:
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的最短路径,但我不知道如何有效地保存该路径然后打印它。知道怎么解决吗?
答案 0 :(得分:3)
如果从节点A开始执行BFS,则您访问的所有节点可能有多个子节点,但每个节点只有一个父节点。当您浏览图表时,只需保存您访问的每个节点的父节点(尚未访问过的节点)。
当您发现节点B只查找其父节点,然后查找其父节点的父节点,依此类推。这为您提供了路径。