从未加权图中打印最短路径
Printing shortest path from unweighted graph
我有一个表示为邻接表的有向图:
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 的最短路径,但我不知道如何有效地保存该路径然后打印它。知道如何解决吗?
如果您从节点 A 开始执行 BFS,您访问的所有节点可能有多个子节点,但每个节点只有一个父节点。当您浏览图表时,只需保存您访问的每个节点的父节点(尚未访问)。
当您找到节点 B 时,只需查找其父节点,然后查找其父节点的父节点,依此类推。这给了你路径。
我有一个表示为邻接表的有向图:
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 的最短路径,但我不知道如何有效地保存该路径然后打印它。知道如何解决吗?
如果您从节点 A 开始执行 BFS,您访问的所有节点可能有多个子节点,但每个节点只有一个父节点。当您浏览图表时,只需保存您访问的每个节点的父节点(尚未访问)。
当您找到节点 B 时,只需查找其父节点,然后查找其父节点的父节点,依此类推。这给了你路径。