ЗАДАЧИ
problems.ru |
О проекте
|
Об авторах
|
Справочник
Каталог по темам | по источникам | |
|
Задача 102894
УсловиеЗадан ориентированный граф с N вершинами, пронумерованными целыми числами от 1 до N. Напишите программу, которая подсчитывает количество различных путей между всеми парами вершин графа.Входные данные Входной файл содержит количество вершин графа N (1 ≤ N ≤ 33) и список дуг графа, заданных номерами начальной и конечной вершин. Выходные данные Вывести в выходной файл матрицу N × N, элемент (i, j) которой равен числу различных путей, ведущих из вершины i в вершину j, или -1, если существует бесконечно много таких путей. Пример входного файла 5 1 2 2 4 3 4 4 1 5 3 1 1 Пример выходного файла -1 -1 0 -1 0 -1 -1 0 -1 0 -1 -1 0 -1 0 -1 -1 0 -1 0 -1 -1 1 -1 0 РешениеСкачать архив тестов и решенийПусть A = [aij] – матрица смежности графа, т.е. aij равно 1, если граф содержит дугу из вершины i в вершину j, и 0 в противном случае. Матрица A задает количество путей из одного ребра между всеми парами вершин графа. Аналогичным образом, элементы akij матрицы Ak определяют количество путей из k ребер [Шень 95, п. 9.1; Кристофидес 78, п. 1.8]. Следовательно, матрица В = A + A2 + ... + AN-1 для каждой пары вершин (i, j) определяет суммарное количество путей из i в j, состоящих не более чем из N-1 ребра. Для каждой пары вершин (i, j) заданного графа мы имеем одну из следующих двух возможностей: а) Существует лишь конечное число путей из i в j (это означает, что часть графа между вершинами i и j 1 не содержит циклов). В этом случае длины этих путей ограничены N-1 ребром и aNij = aN+1ij= ... = 0. б) Существует бесконечное число таких путей, т.е. соответствующая часть графа содержит цикл, а значит, и элементарный цикл. Поскольку количество ребер в этом цикле не превосходит N, то найдется и путь из i в j длины от N до 2N-1 ребер. В этом случае имеем aNij + aN+1ij + ... + a2N-1ij > 0 Таким образом, ненулевые позиции матрицы
(I
+B)AN
= AN
+ AN+1
+
...
+ A2N-1 соответствуют тем парам вершин, число путей между которыми бесконечно. В
эти позиции результирующей матрицы необходимо занести значения -1. В
остальные позиции следует перенести числа из матрицы
B. Следует отметить, что для выполнения описанных вычислений нужно
использовать переменные типа Double или Extended. Максимальное число,
которое может появиться в результирующей матрице, равняется
231
= MaxLongInt
+
1.
Источники и прецеденты использования |
© 2004-...
МЦНМО
(о копирайте)
|
Пишите нам
|