import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
np.set_printoptions(precision=4, suppress=True)
print("=== ЗАДАНИЕ 1 ===")
A1 = np.array([[0, 1, 0, 1], [1, 0, 1, 1], [0, 1, 0, 1], [1, 1, 1, 0]])
M_inc = np.array([[1, 1, 0, 0, 0], [1, 0, 1, 1, 0], [0, 0, 1, 0, 1], [0, 1, 0, 1, 1]])
print("1) Матрица инцидентности:\n", M_inc)
D1 = np.diag(np.sum(A1, axis=1))
L1 = D1 - A1
print("\n2) Матрица Кирхгофа / Лапласа:\n", L1)
eigenvalues1 = np.linalg.eigvals(A1)
print("\n3) Спектр графа (собственные значения А):", np.sort(eigenvalues1))
print("\n=== ЗАДАНИЕ 2 ===")
A2 = np.array([[1, 1, 0], [0, 1, 1], [1, 0, 0]])
det2 = np.linalg.det(A2)
print(f"2) Определитель матрицы: {round(det2)}")
eigenvalues2 = np.linalg.eigvals(A2)
print("3) Спектр матрицы:", eigenvalues2)
print("\n=== ЗАДАНИЕ 3 ===")
A3 = np.array([[1, 1, 1], [1, 1, 1], [1, 0, 1]])
eigenvalues3 = np.linalg.eigvals(A3)
print("1, 4) Спектр графа (матрицы):", np.sort(eigenvalues3))
plt.figure(figsize=(15, 5))
# --- Граф 1 ---
G1 = nx.from_numpy_array(A1)
mapping = {0: 'A', 1: 'B', 2: 'C', 3: 'D'}
G1 = nx.relabel_nodes(G1, mapping)
pos1 = {'A': (0, 1), 'B': (-1, 0), 'D': (1, 0), 'C': (0, -1)}
plt.subplot(1, 3, 1)
plt.title("Рисунок графа (Задание 1)")
nx.draw_networkx(G1, pos=pos1, node_color='red', node_size=600, font_color='white', font_weight='bold')
# --- Граф 2 ---
G2 = nx.from_numpy_array(A2, create_using=nx.DiGraph)
pos2 = {0: (1, 0), 1: (-0.5, -0.86), 2: (-0.5, 0.86)}
plt.subplot(1, 3, 2)
plt.title("Рисунок графа (Задание 2)")
nx.draw_networkx(G2, pos=pos2, node_color='lightblue', with_labels=True, arrowsize=15, connectionstyle="arc3,rad=0.1")
# --- Граф 3 ---
G3 = nx.from_numpy_array(A3, create_using=nx.DiGraph)
pos3 = {0: (1, 0), 1: (-0.5, -0.86), 2: (-0.5, 0.86)}
plt.subplot(1, 3, 3)
plt.title("Рисунок графа (Задание 3)")
nx.draw_networkx(G3, pos=pos3, node_color='lightgreen', with_labels=True, arrowsize=15, connectionstyle="arc3,rad=0.1")
plt.tight_layout()
plt.show()