Bağlı bir grafiği var (aksi maksimum mesafe sonsuz) ve tüm düğüm noktaları numaraları varsayarsak ....
(From_node, to_node, 1), (mesafe nedeniyle, itibaren) bir tablo tohum. Her demet için, from_node değeri her zaman to_node değerinden daha az olduğundan emin olmalısınız
CREATE TABLE hops (
from_node int not null,
to_node int not null,
distance int not null default 0,
primary key (from_node, to_node, distance)
)
-- first load:
INSERT INTO hops (from_node, to_node)
SELECT from_node, to_node FROM rel;
-- iterative step
INSERT INTO hops (from_node, to_node, distance)
SELECT a.from_node, b.to_node, min(a.distance+b.distance)
FROM hops a, hops b
WHERE a.to_node = b.from_node
AND a.from_node <> b.from_node -- not self
AND a.to_node <> b.to_node -- still not self
AND a.from_node <> b.from_node -- no loops
AND NOT EXISTS ( -- avoid duplicates
SELECT * FROM hops c
WHERE c.from_node = a.from_node
AND c.to_node = b.to_node
AND c.distance = a.distance+b.distance)
GROUP BY a.from_node, b.to_node
Hiçbir satır eklenir kadar art arda ekleme yürütmek. Sonra çapı almak için maksimum mesafe seçin.
EDIT: ağırlıklı köşeler ile bir grafik için, sadece yerine 1 kullanarak daha ağırlıkları ile mesafe alan tohum olacaktır.