Clasificación topológica de gráfico acíclico dirigido DAG y solución de ruta más corta de fuente única: puede haber bordes de peso negativos, pero no bucles (incluso anillos de peso positivo)

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:
ejemplo
1.1 Descripción del
Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí
2.4. Diagrama:
Inserte la descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/qq_33726635/article/details/106504178
Recomendado
Clasificación