Assuming you have a connected graph (otherwise the maximum distance is infinite), and all your node points are numbers ....
(, , ) (from_node, to_node, 1). , from_node to_node
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)
)
INSERT INTO hops (from_node, to_node)
SELECT from_node, to_node FROM rel;
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
AND a.to_node <> b.to_node
AND a.from_node <> b.from_node
AND NOT EXISTS (
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
, . , .
EDIT: , 1.