Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- n = int ( input() )
- a = [ None ] * n
- # Читаем матрицу смежности
- for i in range(n):
- a[i] = list( map(int, input().split() ) )
- u,v = map(int, input().split() )
- # Уменьшаем индексы, чтобы работать с номерами [0,n-1]
- u -= 1
- v -= 1
- #Очередь и функции для работы с ней
- class Queue:
- def __init__(self, n):
- self.q = [0] * n
- self.l = 0 # Первый элемент очереди
- self.r = 0 # Номер элемента после последнего
- def push(self, x):
- self.q[self.r] = x
- self.r+=1
- def pop(self):
- res = self.q[self.l]
- self.l+=1
- return res
- def isEmpty(self):
- return self.l>=self.r
- q = Queue(n)
- # Массив, в котором отмечаем вершины, которые были в очереди
- used = [False] * n
- # Массив, в котором сохраняем расстояние до вершин
- d = [ -1 ] *n
- q.push(u)
- used[u] = True
- d[u] = 0
- while not q.isEmpty():
- c = q.pop()
- #перебираем соседей
- for i in range(n):
- # Если есть ребро и вершину ещё не обработали
- if a[c][i] == 1 and not used[i]:
- #Добавляем в очередь вершину i
- q.push(i)
- used[i] = True
- d[i] = d[c] + 1
- print(d[v])
Add Comment
Please, Sign In to add comment