Для заданной двоичной матрицы N x N нам нужно найти общее количество позиций матрицы, из которых идет бесконечный путь. Говорят, что любая позиция (i, j) имеет бесконечный путь, если и только если позиция (i, j) имеет значение 1, и все следующие позиции в ее строке (i) и ее столбце (j) должны иметь значение 1. Если любая позиция рядом с (i, j) в строке (i) или в столбце (j) будет иметь значение 0, то позиция (i, j) не имеет бесконечного пути.
Примеры:
Input : 0 1 0 1 1 1 0 1 1 Output : 4 Endless points are (1, 1), (1, 2), (2, 1) and (2, 2). For all other points path to some corner is blocked at some point.Input : 0 1 1 1 1 0 0 1 0 Output : 1 Endless point is (0, 2).
Наивный подход:
Мы пересекаем все позиции, для каждой позиции мы проверяем, имеет ли эта позиция бесконечный путь или нет. Если да, то посчитайте, иначе проигнорируйте. Но, как обычно, сложность его времени кажется высокой.
Временная сложность: O (n 3 )
Advance Approach (Динамическое программирование):
Мы можем легко сказать, что если в любой позиции есть ноль, то он заблокирует путь для всех оставшихся позиций и вершины.
Также мы можем сказать, что любая позиция (i, j) будет иметь бесконечную строку, если (i, j + 1) будет иметь бесконечную строку и значение (i, j) равно 1.
Аналогично, мы можем сказать, что любая позиция (i, j) будет иметь бесконечный столбец, если (i + 1, j) будет иметь бесконечный столбец и значение (i, j) равно 1.
Таким образом, мы должны поддерживать две матрицы: одну для строки и одну для столбца. Всегда начинайте с самой правой позиции для строки и самой нижней позиции для столбца и проверяйте только следующую позицию, имеет ли она бесконечный путь или нет.
И наконец, если какая-либо позиция будет иметь бесконечный путь в матрице строк и столбцов, то эта позиция называется бесконечным путем.
|
Джава
|
python3
|
C #
|
PHP
|
Выход:
5
Эта статья предоставлена Шивам Прадхан (anuj_charm) . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Найти вероятность достижения всех точек после того, как N переместится из точки N
- Найти максимальные баллы, которые можно получить, удалив элементы из массива
- Найти номер строки двоичной матрицы с максимальным числом 1 с
- Найти максимальное количество составных слагаемых числа
- Соберите максимальное количество точек в сетке, используя два обхода
- Минимальные начальные баллы для достижения пункта назначения
- Непересекающиеся линии для соединения точек по кругу
- Максимум очков, набранных двумя людьми, разрешено встретить один раз
- Максимальное количество точек сверху слева матрицы внизу справа и возврат назад
- Найти количество цыплят в зоопарке на N-й день
- Найти строку с максимальным количеством 1 с
- Найти количество островов | Набор 1 (с использованием DFS)
- Найти количество полостей в матрице
- Найти количество клеток в таблице содержит Х
- Найти количество позиционных элементов
0.00 (0%) 0 votes