71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
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
|