Preguntas frecuentes

Algoritmo Freud desnudo, especificado en el título, y luego elaborar la idea;

 

Pensamiento freudiano:

Para n nodos, si el nodo actúa como un relé entre cualquiera de los otros dos nodos i, j, la distancia entre i y j se puede acortar y luego actualizar;

Usando tres actualizaciones cíclicas, la complejidad es O (n ^ 3);

 

#include <iostream> 
#include <vector> 
#include <string> 
usando el espacio de nombres std; 

const int maxn = 210; 
const int INF = 10000000; 
int ma [maxn] [maxn]; 

int n, m; 
int st, ed; 

void init () { 
	fill (ma [0], ma [0] + maxn * maxn, INF); 
	para (int i = 0; i <n; i ++) { 
		ma [i] [i] = 0; 
	} 
} 

void floyd () { 
	for (int k = 0; k <n; k ++) { 
		for (int i = 0; i <n; i ++) { 
			for (int j = 0; j <n; j ++) { 
				if (ma [i] [k]! = INF && ma [k] [j]! = INF && ma [i] [k] + ma [k] [j] <ma [i] [j]) { 
					ma [ i] [j] = ma [i] [k] + ma [k] [j];

int main () { 
	while (cin >> n >> m) { 
		init (); 
		int a, b, c; 
		para (int i = 0; i <m; i ++) { 
			cin >> a >> b >> c; 
			ma [a] [b] = ma [b] [a] = c; 
		} 
		cin >> st >> ed; 
		floyd (); 
		if (ma [st] [ed] == INF) 
			cout << -1 << endl; 
		else 
			cout << ma [st] [ed] << endl; 
	} 
}

  

Supongo que te gusta

Origin www.cnblogs.com/songlinxuan/p/12693025.html
Recomendado
Clasificación