Math Problem Statement

A. Список смежности Ограничение времени 1 секунда Ограничение памяти 64.0 Мб Ввод стандартный ввод Вывод стандартный вывод Напишите программу для преобразования матрицы смежности ориентированного, не взвешенного графа в список смежности. В графе может быть до 100 вершин.

Формат ввода Первая строка содержит целое число n (1 ≤ n ≤ 100) — количество вершин в графе. Следующие n строк представляют матрицу смежности графа. Каждая строка содержит n чисел, разделённых пробелами. Каждое число равно 0 или 1, где 1 означает наличие направленного ребра от вершины i к вершине j, а 0 — его отсутствие.

Формат вывода Для каждой вершины графа в отдельной строке выводятся:

Целое число m — количество смежных с этой вершиной вершин.

Далее следуют m чисел, разделённых пробелами — номера смежных вершин. Вершины перечисляются в порядке возрастания номеров.

Пример 1 Ввод Вывод 4 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 2 1 3 0 0 Пример 2 Ввод Вывод 6 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 2 2 4 0 1 6 0 2 3 6 1 4

Solution

Для решения задачи необходимо преобразовать матрицу смежности ориентированного графа в список смежности. Основная идея заключается в том, чтобы пройти по матрице и для каждой вершины, где в соответствующей строке есть единица (то есть наличие ребра), добавить эти вершины в список смежности.

Алгоритм:

  1. Прочитать количество вершин n.
  2. Прочитать саму матрицу смежности (размерность n x n).
  3. Для каждой вершины пройти по строке и, если в ячейке находится единица, то добавить соответствующую вершину в список смежности этой вершины.
  4. Вывести результат, где для каждой вершины выводится количество смежных вершин и сами вершины (в порядке возрастания номеров).

Реализация

python
n = int(input()) # количество вершин adjacency_matrix = [list(map(int, input().split())) for _ in range(n)] # матрица смежности # Обрабатываем каждый индекс вершины for i in range(n): # Собираем все вершины, с которыми i-ая вершина имеет ребра neighbors = [] for j in range(n): if adjacency_matrix[i][j] == 1: # Если есть ребро от вершины i к вершине j neighbors.append(j + 1) # Сохраняем номер вершины (нумерация с 1) # Выводим количество соседей и их номера print(len(neighbors), *neighbors)

Пояснение:

  • Сначала считываем количество вершин.
  • Затем считываем саму матрицу смежности, где каждая строка представляет наличие или отсутствие ребра между вершинами.
  • Для каждой вершины (строки матрицы) ищем все вершины, с которыми есть ребро, и сохраняем эти вершины.
  • В конце выводим количество смежных вершин и их номера (нумерация с 1).

Пример 1:

Ввод:

4
0 0 0 0
1 0 1 0
0 0 0 0
0 0 0 0

Вывод:

0
2 1 3
0
0

Пример 2:

Ввод:

6
0 1 0 1 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 0 0
0 0 1 0 0 1
0 0 0 1 0 0

Вывод:

2 2 4
0
1 6
0
2 3 6
1 4

Важные моменты:

  1. Вершины в матрице индексируются с 0, но в выводе должны быть нумерации с 1.
  2. Для каждой вершины мы выводим сначала количество смежных вершин, затем сами вершины в порядке возрастания.

Если есть вопросы или что-то нужно уточнить — пишите!

Ask a new question for Free

By Image

Drop file here or Click Here to upload

Math Problem Analysis

Mathematical Concepts

Graph Theory
Adjacency Matrix
Adjacency List

Formulas

-

Theorems

Graph Representation Theorem

Suitable Grade Level

Grades 10-12