Re: Матрица
От: Apapa Россия  
Дата: 06.02.03 11:47
Оценка: 75 (2)
Привет, Pushkin!

P>Есть битовая матрица. Её нужно преобразовать.

P>В каждой ячейке новой матрицы должна стоять единица, если либо в этом столбце, либо в этой строке старой матрицы была хоть одна единица.
P>Важное условие: преобразовывать надо "по месту", нельзя заводить новую матрицу.
P>Более того, нельзя вообще заводить никаких переменных кроме счётчиков циклов.

Осноная идея: собрать в некоторой строке и столбце информацию о тех столбцах и строках, где есть единицы.

Вариант 1.
1. В зависимости от того, есть ли единицы в первом столбце и в первой строке попадаем в одну из 4-х частей кода (фактически запоминаем эту информацию без лишних переменных — теперь я понимаю, почему в микрософте такие программы пишут).
2. В цикле бежим по строкам, начиная со второй, и в каждой ищем единицу. Если есть, то ставим в соответствующем месте первого столбца 1, иначе 0.
3. То же самое со столбцами... Испохабили левый столбец и верхнюю строку? Не страшно (см.п.1)!
4. Бегаем по всем ячейкам матрицы, начиная со второй строки и второго столбца, и смотрим, есть ли единица в соответствующей строке первого столбца или соответствующем столбце первой строки. Если есть — единица, иначе — ноль (хотя он и так стоит).
5. Если мы в той части кода, где предполагается наличие хоть одной единицы в первом столбце, то весь этот столбец заполняем единицами, иначе оставляем как есть.
6. То же самое с первой строкой!

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


Здесь могла бы быть Ваша реклама!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.