Files
freeCodeCamp/guide/arabic/algorithms/graph-algorithms/floyd-warshall-algorithm/index.md
2019-06-20 16:33:33 -05:00

1.7 KiB

title, localeTitle
title localeTitle
Floyd Warshall Algorithm Floyd Warshall Algorithm

Floyd Warshall Algorithm

خوارزمية Floyd Warshall هي خوارزمية رائعة للعثور على أقصر مسافة بين جميع الرؤوس في الرسم البياني. يحتوي على خوارزمية موجزة جداً و O (V ^ 3) تعقيد وقت (حيث V عدد الرؤوس). يمكن استخدامه مع الأوزان السلبية ، على الرغم من أن دورات الوزن السلبية يجب ألا تكون موجودة في الرسم البياني.

تقييم

تعقيد الفضاء: O (V ^ 2)

تعقيد وقت حالة أسوأ: O (V ^ 3)

تنفيذ بايثون

# A large value as infinity
inf = 1e10

def floyd_warshall(weights):
    V = len(weights)
    distance_matrix = weights
    for k in range(V):
        next_distance_matrix = [list(row) for row in distance_matrix] # make a copy of distance matrix
        for i in range(V):
            for j in range(V):
                # Choose if the k vertex can work as a path with shorter distance
                next_distance_matrix[i][j] = min(distance_matrix[i][j], distance_matrix[i][k] + distance_matrix[k][j])
        distance_matrix = next_distance_matrix # update
    return distance_matrix

# A graph represented as Adjacency matrix
graph = [
    [0, inf, inf, -3],
    [inf, 0, inf, 8],
    [inf, 4, 0, -2],
    [5, inf, 3, 0]
]

print(floyd_warshall(graph))

معلومات اكثر:

الرسوم البيانية

فلويد وارهال - ويكيبيديا