Tengo algunos datos de ruta más cortos para un gráfico. ¿Puedo reconstruir el gráfico a partir de estos datos?
Más precisamente, tengo una matriz booleana (0/1) para cada vértice v en el gráfico (V, E) . El elemento de matriz [s, d] es igual a 1 si v v está en la ruta más corta desde el vértice de origen s hasta el vértice de destino d . Todos los bordes en el gráfico tienen la misma longitud.
Por ejemplo, para el gráfico
(V1) -- (V2) -- (V3)
las tres matrices serían:
V1:
1 1 1
1 0 0
1 0 0
V2:
0 1 1
1 1 1
1 1 0
V3:
0 0 1
0 0 1
1 1 1
Mis preguntas:
1) ¿hay un algoritmo para reconstruir el conjunto de bordes E a partir de estas matrices?
2) ¿la solución es siempre única? (Esto es más una curiosidad personal que un requisito real)
3) ¿se puede generalizar el algoritmo a longitudes de borde no uniformes?
algorithms
kfx
fuente
fuente
v1
yv2
, entonces exactamente estos dos vértices están en el camino más corto entrev1
yv2
. Entonces, para cualquier otro vérticev
,[v1, v] == 0 == [v, v1]
en la matriz dev2
y[v2, v] == 0 == [v, v2]
en la matriz dev1
.Respuestas:
puede extraer la matriz de adyacencia de las matrices de ruta utilizando la siguiente propiedad.
Hay un borde entre 2 vértices
s
yd
si y solo si el camino más corto entre ellos contiene solos
yd
.Para una longitud no uniforme, solo obtendrá la solución única si se mantiene la desigualdad del triángulo . De lo contrario, un gráfico con
d(p1,p2)=1
d(p2,p3)=2
yd(p1,p3)=4
mostrará la ruta más corta entrep1
yp3
como a través enp2
lugar de la conexión directa. Lo que significa que el borde [p1, p3] nunca será parte de una ruta más corta.fuente