נגדיר את הסגור הטרנזיטיבי של גרף מכוון
כלומר בסגור טרנזיטיבית יש קשת בין שני קודקודים אמ״מ יש בינהם מסלול בגרף המקורי.
אחת השיטות לחישוב של
נוכל לבנות אלגוריתם למציאת גרף כזה שמאוד דומה ל floyd ושרץ אותו זמן ריצה אבל חוסך בזכרון כי הוא מתבסס על פעולות לוגיות שמהירות יותר לחישוב בניגוד לפעולות אריתמטיות.
אם כן נחליף את פעולה ה
נגדיר
לבסוף
כלומר -
ההגדרה הריקורסיבית:
המשמעות היא שבראשון מחזירים אחד אם יש קשת ישירה ובשני אנחנו בודקים אם קיים מסלול מ
כמו בפלויד נחשב מטריצת
transitive_closure(G):
n = |G.V|
let T[0] = new matrix[n,n]
for i = 1 to n
if i == j or (i,j) in G.E
t_ij[0] = 1
else
t_ij[0] = 0
for k = 1 to n
let T[K] = new matrix[n,n]
for i = 1 to n
for j = 1 to n
t_ij[k] = t_ij[k-1] ∨ (t_ik[k-1] ∧ t_kj[k-1])
return T[n]
זמן הריצה כפי שאמרנו הוא

כמובן שניתן להשתמש באלגוריתם אחרים שאנחנו מכירים כמו גונסון או כל אלגוריתם APSP אחר כיוון שאם קיים מרחק קצר ביותר אז קיים מסלול יש יחס ישר בין הדברים. למעשה לא חייב כלל לשנות את האלגוריתם ולהתאים אותו במיוחד כפי שהתאמנו. נוכל פשוט להריץ כל אלגוריתם APSP ולבדוק פשוט עבור כל קודקוד את ערך המסלול הקצר ביותר שלו עם כל קודקוד אחר והיכן שהערך הוא לא
לבעיית הסגור טרנזיטיבי יש קשר ישיר עם בעיית כפל מטריצות מהיר . כלומר אם את האחת נוכל לפתור בזמן מהיר יותר אז גם את השנייה נוכל לייעל בהתאמה. באופן פורמלי יותר ננסח זאת כך
אם ניתן לחשב כפל מטריצות בוליאניות מגודל