Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 05:21   #1
FYBVFPFYBC
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 19
По умолчанию Преобразование матрицы

Привет всем!
Есть матрица заданного размера. Во всех ячейках нули и единицы, сгенерированные случайно и неравномерно. Вероятность встретить единицу в ячейке - 10%. Смежные ячейки с единицами образуют комплексы из ячеек-единиц. Смежными ячейками считаются все ячейки вокруг данной ячейки, то есть: и с четырёх сторон относительно данной, и с четырёх углов (по диагонали).

Нужно преобразовать матрицу так, чтобы каждый комплекс из смежных ячеек-единиц содержал не больше пяти ячеек-единиц, и был окружён как минимум одной ячейкой-нулём так же со всех сторон.

Один из возможных вариантов комплекса из ячеек-единиц с максимальным числом этих ячеек (5) может выглядеть так:

000000
001000
000100
001100
010000
000000

Заранее спасибо за ваши идеи!

P.S. Начальное количество нулей и единиц в матрице сохранять не обязательно.
FYBVFPFYBC вне форума Ответить с цитированием
Старый 15.12.2012, 17:33   #2
LynXzp
Пользователь
 
Аватар для LynXzp
 
Регистрация: 04.10.2012
Сообщений: 95
По умолчанию

http://www.programmersforum.ru/showthread.php?t=34061
Пишу на чистом С, плюсы спилил.
LynXzp вне форума Ответить с цитированием
Старый 15.12.2012, 20:09   #3
FYBVFPFYBC
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от LynXzp Посмотреть сообщение
И что, умник? Если нечего сказать - не тратил бы чужое время. Мне нужна идея, код писать я собираюсь сама. На google.com бы ещё отправил...
FYBVFPFYBC вне форума Ответить с цитированием
Старый 15.12.2012, 23:03   #4
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
По умолчанию

LynXzp
+2001000
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки
intmain вне форума Ответить с цитированием
Старый 15.12.2012, 23:21   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ну первым пунктом - берем комплекс и по краям загоняем в него нули, поскольку это обязательное условие, то есть:

Код:
000000
0xxxx0
0xxxx0
0xxxx0
0xxxx0
000000
x - Это пока не установленные цифры

2) Создаем некий счетчик для выноса лишних единиц из комплекса так сказать "за скобку"

3) Считаем, сколько в комплексе ячеек-единиц, и если больше - увеличиваем счетчик и убираем лишние единицы. Если меньше и счетчик>0, то добавляем единицы любо до пяти штук, либо сколько можем (зависит от содержимого счетчика). Сам счетчик, соответственно, декрементируем

4) Повторяем по всем комплексам матрицы пункты 1-3

В итоге всего этого непотребства в матрице появятся комплексы с пятью единицами либо меньше пяти единиц (но не больше). Меньше может появиться тогда, когда счетчик=0, а единиц в комплексе<5 => переходим к следующему комплексу, оставляя текущий в таком виде, в каком он сейчас

5) Если счетчик >0 Повторяем проход по всем комплексам, проверяем - если единиц <5 - дополняем до 5, уменьшая счетчик.

За идею сойдет?

Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 16.12.2012, 02:40   #6
FYBVFPFYBC
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Ну первым пунктом - берем комплекс и по краям загоняем в него нули, поскольку это обязательное условие, то есть:

Код:
000000
0xxxx0
0xxxx0
0xxxx0
0xxxx0
000000
x - Это пока не установленные цифры

2) Создаем некий счетчик для выноса лишних единиц из комплекса так сказать "за скобку"

3) Считаем, сколько в комплексе ячеек-единиц, и если больше - увеличиваем счетчик и убираем лишние единицы. Если меньше и счетчик>0, то добавляем единицы любо до пяти штук, либо сколько можем (зависит от содержимого счетчика). Сам счетчик, соответственно, декрементируем

4) Повторяем по всем комплексам матрицы пункты 1-3

В итоге всего этого непотребства в матрице появятся комплексы с пятью единицами либо меньше пяти единиц (но не больше). Меньше может появиться тогда, когда счетчик=0, а единиц в комплексе<5 => переходим к следующему комплексу, оставляя текущий в таком виде, в каком он сейчас

5) Если счетчик >0 Повторяем проход по всем комплексам, проверяем - если единиц <5 - дополняем до 5, уменьшая счетчик.

За идею сойдет?

Большое спасибо.
FYBVFPFYBC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование матрицы P91 Помощь студентам 2 21.10.2012 18:13
Матрицы. Преобразование (C#) RIOs Помощь студентам 1 08.06.2012 22:13
преобразование матрицы. Dmitriy_ Помощь студентам 0 25.05.2011 22:24
Преобразование матрицы C++ MissFehn Помощь студентам 1 20.05.2011 07:45
Преобразование матрицы. AndyShafl Общие вопросы Delphi 1 22.12.2009 13:59