22 - python & all web labs
This commit is contained in:
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
|
||||
Reference in New Issue
Block a user