22 - python & all web labs
This commit is contained in:
6
labPython/lab22/FileName
Normal file
6
labPython/lab22/FileName
Normal file
@@ -0,0 +1,6 @@
|
||||
5
|
||||
1 1 0 1 1
|
||||
0 0 0 0 0
|
||||
0 1 1 1 0
|
||||
0 0 0 1 0
|
||||
0 0 1 1 1
|
||||
5
labPython/lab22/FileName1
Normal file
5
labPython/lab22/FileName1
Normal file
@@ -0,0 +1,5 @@
|
||||
4
|
||||
1 0 1 1
|
||||
1 0 0 1
|
||||
1 1 0 1
|
||||
1 1 0 0
|
||||
4
labPython/lab22/FileName2
Normal file
4
labPython/lab22/FileName2
Normal file
@@ -0,0 +1,4 @@
|
||||
3
|
||||
1 4
|
||||
1 3 4
|
||||
1 3 2 4
|
||||
70
labPython/lab22/task_1.py
Normal file
70
labPython/lab22/task_1.py
Normal file
@@ -0,0 +1,70 @@
|
||||
print(
|
||||
"task: Graf2\nПостроение матрицы инцидентности неориентированного графа по матрице смежности"
|
||||
)
|
||||
|
||||
import random
|
||||
|
||||
|
||||
def create_file():
|
||||
n = random.randint(3, 6)
|
||||
with open("FileName1", "w") as f:
|
||||
f.write(str(n) + "\n")
|
||||
for i in range(n):
|
||||
row = []
|
||||
for j in range(n):
|
||||
if i == j:
|
||||
row.append("0")
|
||||
else:
|
||||
row.append(str(random.randint(0, 1)))
|
||||
f.write(" ".join(row) + "\n")
|
||||
|
||||
|
||||
def read_graph():
|
||||
try:
|
||||
with open("FileName1") as f:
|
||||
n = int(f.readline())
|
||||
a = [list(map(int, f.readline().split())) for _ in range(n)]
|
||||
return n, a
|
||||
except:
|
||||
return None, None
|
||||
|
||||
|
||||
def build_incidence(n, a):
|
||||
edges = []
|
||||
for i in range(n):
|
||||
for j in range(i, n):
|
||||
if a[i][j] != 0:
|
||||
edges.append((i, j))
|
||||
m = len(edges)
|
||||
b = [[0] * m for _ in range(n)]
|
||||
for idx, (i, j) in enumerate(edges):
|
||||
b[i][idx] = 1
|
||||
b[j][idx] = 1
|
||||
return m, b
|
||||
|
||||
|
||||
def write_result(n, m, b):
|
||||
with open("FileName2", "w") as f:
|
||||
f.write(f"{n} {m}\n")
|
||||
for row in b:
|
||||
f.write(" ".join(map(str, row)) + "\n")
|
||||
|
||||
|
||||
while True:
|
||||
print("\n1 - создать файл FileName1")
|
||||
print("2 - выполнить задачу (результат в FileName2)")
|
||||
print("0 - выход")
|
||||
c = input(">> ")
|
||||
if c == "1":
|
||||
create_file()
|
||||
print("FileName1 создан")
|
||||
elif c == "2":
|
||||
n, a = read_graph()
|
||||
if n is None:
|
||||
print("ошибка чтения FileName1")
|
||||
continue
|
||||
m, b = build_incidence(n, a)
|
||||
write_result(n, m, b)
|
||||
print("результат записан в FileName2")
|
||||
elif c == "0":
|
||||
break
|
||||
66
labPython/lab22/task_2.py
Normal file
66
labPython/lab22/task_2.py
Normal file
@@ -0,0 +1,66 @@
|
||||
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
|
||||
80
labPython/lab22/task_3.py
Normal file
80
labPython/lab22/task_3.py
Normal file
@@ -0,0 +1,80 @@
|
||||
print(
|
||||
"task: Graf10\nПоиск всех маршрутов между городами с сортировкой по длине и лексикографически"
|
||||
)
|
||||
|
||||
import random
|
||||
|
||||
|
||||
def create_file():
|
||||
n = random.randint(4, 6)
|
||||
with open("FileName1", "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("FileName1") 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 dfs(m, v, target, visited, path, all_paths):
|
||||
if v == target:
|
||||
all_paths.append(path[:])
|
||||
return
|
||||
for u in range(len(m)):
|
||||
if m[v][u] == 1 and u not in visited:
|
||||
visited.add(u)
|
||||
path.append(u)
|
||||
dfs(m, u, target, visited, path, all_paths)
|
||||
path.pop()
|
||||
visited.remove(u)
|
||||
|
||||
|
||||
def solve(n, m, k1, k2):
|
||||
paths = []
|
||||
dfs(m, k1, k2, {k1}, [k1], paths)
|
||||
paths.sort(key=lambda x: (len(x), x))
|
||||
return paths
|
||||
|
||||
|
||||
def write(paths):
|
||||
with open("FileName2", "w") as f:
|
||||
if not paths:
|
||||
f.write("-1\n")
|
||||
else:
|
||||
f.write(str(len(paths)) + "\n")
|
||||
for p in paths:
|
||||
f.write(" ".join(str(x + 1) for x in p) + "\n")
|
||||
|
||||
|
||||
while True:
|
||||
print("\n1 - создать файл FileName1")
|
||||
print("2 - выполнить задачу (результат в FileName2)")
|
||||
print("0 - выход")
|
||||
c = input(">> ")
|
||||
if c == "1":
|
||||
create_file()
|
||||
print("FileName1 создан")
|
||||
elif c == "2":
|
||||
n, m = read_graph()
|
||||
if n is None:
|
||||
print("ошибка чтения FileName1")
|
||||
continue
|
||||
try:
|
||||
k1 = int(input("K1: ")) - 1
|
||||
k2 = int(input("K2: ")) - 1
|
||||
except:
|
||||
print("ошибка ввода")
|
||||
continue
|
||||
paths = solve(n, m, k1, k2)
|
||||
write(paths)
|
||||
print("результат записан в FileName2")
|
||||
elif c == "0":
|
||||
break
|
||||
Reference in New Issue
Block a user