Najkrótsza ścieżka w grafie pomiędzy dwoma wierzchołkami to ścieżka o minimalnej ilości krawędzi spośród dostępnych ścieżek prowadzących pomiędzy tymi wierzchołkami.
Znalezienie najkrótszej ścieżki polega na użyciu kolejki i odwiedzeniu każdego sąsiadującego węzła zaczynając od węzłów początkowych, które przemierzają graf metodą przeszukiwania wszerz, aby znaleźć najkrótszą ścieżkę między dwoma węzłami grafu. W tym celu wykorzystuje się algorytm BFS (ang. Breadth-first search).

Implementacja algorytmu wyszukiwania najkrótszej ścieżki w grafie nieskierowanym z wykorzystaniem słównika reprezentującego powyższy graf:
# Funcja wyszukująca w szerz najkrotszą sciezkę pomiędzy dwoma węzłami
def bfs_sp(graph, start, end):
explored = []
# Kolejka do przejścia przez graf w BFS
queue = [[start]]
# Sprawdzenie czy węzeł początkowy i konńcowy nie są tożsame
if start == end:
print("Wezel poczatkowy = Wezel koncowy")
return
# Pętla do przechodzenia przez graf za pomocą kolejki
while queue:
path = queue.pop(0)
node = path[-1]
# Warunek sprawdzający, czy bieżący węzeł nie został odwiedzony
if node not in explored:
neighbours = graph[node]
# Pętla umożliwiająca iterację po sąsiadach węzła
for neighbour in neighbours:
new_path = list(path)
new_path.append(neighbour)
queue.append(new_path)
# Warunek sprawdzający, czy węzeł sąsiedni jest węzłem docelownym
if neighbour == end:
print("Najkrótsza ścieżka = ", *new_path)
return
explored.append(node)
# Informacja o stanie w którym węzły nie są połączone
print("Ścieżka pomiędzy węzłami nie istnieje!")
return
if __name__ == "__main__":
# Graf w formie słownika wezłów
graph = {
'A': ['B', 'E'],
'B': ['A', 'C'],
'C': ['B', 'E', 'F'],
'D': ['E', 'H'],
'E': ['A', 'C', 'D'],
'F': ['C', 'G', 'H'],
'G': ['F'],
'H': ['D', 'F']
}
# Wywołanie funkcji
bfs_sp(graph, 'A', 'H')
Powyższy kod wyszukuje najkrótszą ścieżkę pomiędzy węzłami A oraz H.
Wygląda ona następująco: A E D H.