EduBrick

E. Все попарные расстояния

2000 мс · 256 МБ · всё или ничего

Тот же Флойд, но выводится вся матрица расстояний, а не одно число.

Задача техническая, и ценность её в том, чтобы один раз аккуратно написать обработку бесконечности. Два надёжных способа:

Заводить INF заведомо больше любого ответа, но так, чтобы INF + INF не переполнилось. При n≤100n \le 100 и весах до 10410^4 любое конечное расстояние не больше 10610^6; удобное значение — миллиард, а тип long long или int — на ваш выбор, лишь бы сложение двух INF не вышло за диапазон.

Просто не складывать бесконечности: пропускать kk, для которого d[i][k]d[i][k] уже бесконечно. Так делает эталон, и это заодно ускоряет внутренний цикл.

Второй способ надёжнее: он не зависит от того, угадали ли вы величину INF.

Формат ввода

Первая строка содержит число nn (1≤n≤1001 \le n \le 100).

Далее идут nn строк по nn чисел: −1-1 означает отсутствие ребра. Вес не превосходит 10410^4, на главной диагонали нули. Граф ориентированный.

Формат вывода

nn строк по nn чисел: кратчайшие расстояния или −1-1, если пути нет.

Примеры

ввод
4
0 1 -1 4
-1 0 2 -1
-1 -1 0 -1
-1 -1 5 0
вывод
0 1 3 4
-1 0 2 -1
-1 -1 0 -1
-1 -1 5 0
Войдите, чтобы отправлять решения.