1. Clasificación topológica de gráficos acíclicos dirigidos:
después de la búsqueda en profundidad primeroHora de finalización del nodo en orden inversoLa secuencia obtenida es una secuencia topológica, por ejemplo:
1.1 Descripción del
pseudocódigo : La clasificación topológica se puede completar en tiempo O (V + E), porque el tiempo de ejecución de DFS es O (V + E).
2. La ruta más corta de una sola fuente de un gráfico acíclico dirigido:
2.1. Pseudo código para la inicialización del nodo en el gráfico:
void initializeSingleSource(Graph* G, node& s){
for(each node in 顶点集合V){
node.d = 无穷大; // 初始化距离无穷大
node.pre = NULL;
}
s.d = 0; // 源点距离为0
}
2.2. Pseudocódigo para operación slack:
void relax(node& u, node& v, int weight){
if(u.d+weight<v.d){
v.d = u.d+weight; // 距离变小
v.pre = u; // 记录路径
}
}
2.3. Seudocódigo de ruta más corta de fuente única:
2.4. Diagrama:
para resumir:
1. Después de la clasificación topológica, solo se necesita un ciclo para completar la solución de ruta más corta de fuente única.