Алгоритм обхода в ширину не проходит проверку
Задача:
В неориентированном графе требуется найти длину кратчайшего пути между двумя вершинами.
Входные данные
Во входном файле INPUT.TXT записано сначала число N - количество вершин в графе (1 ≤ N ≤ 100). Затем записана матрица смежности (0 обозначает отсутствие ребра, 1 - наличие ребра). Затем записаны номера двух вершин - начальной и конечной.
Выходные данные
В выходной файл OUTPUT.TXT выведите длину кратчайшего пути. Если пути не существует, выведите одно число -1.
Ссылка на задание и там же проверяется: https://acmp.ru/index.asp?main=task&id_task=127
Пример: Ввод:
5
0 1 0 0 1
1 0 1 0 0
0 1 0 0 0
0 0 0 0 0
1 0 0 0 0
3 5
Вывод:
3
Мой код:
def search_width(n: int, start: int, end: int, dict_path: dict) -> int:
from collections import deque
if start == end or n == 1:
return 0
if start > end:
start, end = end, start
distation = [None] * (n + 1)
queq = deque([start])
distation[start] = 0
while queq:
x_point = queq.popleft()
for i in dict_path[x_point]:
if not distation[i]:
distation[i] = distation[x_point] + 1
queq.append(i)
return distation[end] if distation[end] is not None else 1
n = int(input())
dict_path = {i: set() for i in range(1, n + 1)}
for i in range(1, n + 1):
str_user = input().split()
for num, j in enumerate(str_user, 1):
if j == '1':
dict_path[i].add(num)
dict_path[num].add(i)
start, end = map(int, input().split())
print(search_width(n, start, end, dict_path))
Проблема
Основную часть тестов проходит, на 17 тесте выдаёт неправильный ответ.
Предположение: есть особый случай, к которому нужно добавить условие.
Ошибка в моём алгоритме или я не дописал случай?