67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
import random
|
|
from collections import deque
|
|
|
|
|
|
def create_file():
|
|
n = random.randint(4, 7)
|
|
with open("FileName", "w") as f:
|
|
f.write(str(n) + "\n")
|
|
for i in range(n):
|
|
row = [str(random.randint(0, 1)) for _ in range(n)]
|
|
f.write(" ".join(row) + "\n")
|
|
|
|
|
|
def read_graph():
|
|
try:
|
|
with open("FileName") as f:
|
|
n = int(f.readline())
|
|
m = [list(map(int, f.readline().split())) for _ in range(n)]
|
|
return n, m
|
|
except:
|
|
return None, None
|
|
|
|
|
|
def bfs(n, m, start, L):
|
|
dist = [-1] * n
|
|
q = deque([start])
|
|
dist[start] = 0
|
|
while q:
|
|
v = q.popleft()
|
|
for u in range(n):
|
|
if m[v][u] == 1 and dist[u] == -1:
|
|
dist[u] = dist[v] + 1
|
|
if dist[u] <= L:
|
|
q.append(u)
|
|
return {i for i in range(n) if dist[i] != -1 and dist[i] <= L}
|
|
|
|
|
|
while True:
|
|
print("\n1 - создать файл")
|
|
print("2 - выполнить задачу")
|
|
print("0 - выход")
|
|
c = input(">> ")
|
|
if c == "1":
|
|
create_file()
|
|
print("FileName создан")
|
|
elif c == "2":
|
|
n, m = read_graph()
|
|
if n is None:
|
|
print("ошибка чтения FileName")
|
|
continue
|
|
try:
|
|
k1 = int(input("K1: ")) - 1
|
|
k2 = int(input("K2: ")) - 1
|
|
L = int(input("L: "))
|
|
except:
|
|
print("ошибка ввода")
|
|
continue
|
|
s1 = bfs(n, m, k1, L)
|
|
s2 = bfs(n, m, k2, L)
|
|
res = sorted([x + 1 for x in s1 & s2])
|
|
if res:
|
|
print("результат:", *res)
|
|
else:
|
|
print(-1)
|
|
elif c == "0":
|
|
break
|