knightL

BFS

Nov 19th, 2020
948
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.34 KB | None | 0 0
  1. n = int ( input() )
  2. a = [ None ] * n
  3. # Читаем матрицу смежности
  4. for i in range(n):
  5.     a[i] = list( map(int, input().split() ) )
  6. u,v = map(int, input().split() )
  7. # Уменьшаем индексы, чтобы работать с номерами [0,n-1]
  8. u -= 1
  9. v -= 1
  10.  
  11. #Очередь и функции для работы с ней
  12. q = [0] * n
  13. l = 0 # Первый элемент очереди
  14. r = 0 # Номер элемента после последнего
  15.  
  16. def push(x):
  17.     global q,l,r
  18.     q[r] = x
  19.     r+=1
  20.      
  21. def pop():
  22.     global q,l,r
  23.     res = q[l]
  24.     l+=1
  25.     return res
  26.  
  27. def isEmpty():
  28.     global q,l,r
  29.     return l>=r
  30.  
  31. # Массив, в котором отмечаем вершины, которые были в очереди
  32. used = [False] * n
  33. # Массив, в котором сохраняем расстояние до вершин
  34. d = [ -1 ] *n
  35.  
  36. push(u)
  37. used[u] = True
  38. d[u] = 0
  39.  
  40. while not isEmpty():
  41.     c = pop()
  42.  
  43.     #перебираем соседей
  44.     for i in range(n):
  45.         # Если есть ребро и вершину ещё не обработали
  46.         if a[c][i] == 1 and not used[i]:
  47.             #Добавляем в очередь вершину i
  48.             push(i)
  49.             used[i] = True
  50.             d[i] = d[c] + 1
  51.  
  52. print(d[v])
Advertisement
Add Comment
Please, Sign In to add comment