Как вывести на экран список ребер, считанных из файла? Используя ООП.
Тема - графы.
В файле in.txt хранится матрица смежности.from dataclasses import dataclass

# считывание матрицы из файла
with open('in.txt') as f:
matrix =[list(map(int, row.split())) for row in f.readlines()]

@dataclass
class edgeStruct:
u: int #начальная вершина
v: int #конечная вершина
weight: int #вес
Содержимое файла in.txt0 6 20 10 13 9 6 10 2 3
6 0 0 11 7 0 9 16 17 2
20 0 0 20 17 10 2 14 2 4
10 11 20 0 2 18 14 16 15 0
13 7 17 2 0 21 6 0 13 18
9 0 10 18 21 0 4 7 18 9
6 9 2 14 6 4 0 3 15 10
10 16 14 16 0 7 3 0 8 3
2 17 2 15 13 18 15 8 0 0
3 2 4 0 18 9 10 3 0 0

21 Авг 2019 в 06:58
203 +1
0
Ответы
1

Для чтения списка рёбер графа из матрицы смежности можно создать отдельный класс, который получает матрицу в качестве одного из атрибутов и реализует метод для вывода рёбер.

Вот пример кода на Python:

from dataclasses import dataclass
from typing import List
@dataclass
class Edge:
u: int # начальная вершина
v: int # конечная вершина
weight: int # вес
class Graph:
def __init__(self, matrix: List[List[int]]):
self.matrix = matrix
def print_edges(self):
n = len(self.matrix)
edges = []
for i in range(n):
for j in range(n):
if self.matrix[i][j] != 0:
edges.append(Edge(i, j, self.matrix[i][j]))
for edge in edges:
print(f"Edge from {edge.u} to {edge.v}, weight = {edge.weight}")
# считывание матрицы из файла
with open('in.txt') as f:
matrix = [list(map(int, row.split())) for row in f.readlines()]
# создание графа и вывод рёбер
graph = Graph(matrix)
graph.print_edges()

Этот код сначала создаёт класс Edge, представляющий ребро графа с указанными характеристиками, а затем класс Graph, который содержит метод print_edges для вывода всех рёбер из матрицы смежности. Когда матрица загружена из файла, создаётся экземпляр класса Graph, и вызывается метод print_edges, который выводит список рёбер.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир