|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.06.2012, 22:34 | #1 |
Форумчанин
Регистрация: 24.06.2010
Сообщений: 251
|
Отобрать блоки массива
Всем доброго времени суток, необходимо отобрать элементы массива заключённые в нули (то есть отобрать единицы) и переместить каждый блок из единиц в отдельный массив.Размер массива может быть произвольный, как и расположение элементов в нём, также могут быть и сложные конструкции типа
00111111100 00100000100 00101100100 00101100100 00100000100 00111111100 00000000000 ну и естественно не обязательно квадратной формы, возможны любые варианты. . Изначально чтобы определить единици я прохожусь по массиву рекурсивной функцией, однако как отделить отдельные блоки не знаю. По этому прошу вашей помощи. Вот код функции Код:
00011110000111100000 00011110000100111000 00011110000100001000 00000000000111111000 00000000000000000000 00000001111100000000 00000001111100000000 00000000101000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 Последний раз редактировалось revaldo666; 03.06.2012 в 22:45. |
04.06.2012, 02:25 | #2 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Если я правильно понял, то в новом массиве должны быть одни единицы. Тогда прогоняй весь массив с условием если в массиве встречается 1 то записывай в новый массив получается примерно такое:
Код:
Array[] - исходный массив с 0 и 1 ArrayNew[] - отобранный массив Если массив двумерный то тут нужно немного изменить цикл Код:
String - число строк массива Column - число столбцов массива
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
Последний раз редактировалось kineziz; 04.06.2012 в 02:32. |
04.06.2012, 02:37 | #3 | |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Для большей понятности, скажите, каким должен быть ответ на Ваш пример
Цитата:
Форматируйте код, будьте людьми.
|
|
04.06.2012, 08:47 | #4 |
Форумчанин
Регистрация: 24.06.2010
Сообщений: 251
|
исходный массив
00000000000000000000 00011110000111100000 00011110000100111000 00011110000100001000 00000000000111111000 00000000000000000000 00000001111100000000 00000001111100000000 00000000101000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 а ответ массив 1 (позиции первого блока) 1111 1111 1111 массив 2(позиции второго блока) 111 1 111 1 1 11111 массив 3(позиции третьего блока) 11111 11111 1 1 и так далее если есть ещё блоки. |
04.06.2012, 10:46 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А это случайно не вторая часть кодирования Хаффмана?
Жутко похоже на алгоритм сжатия.
I'm learning to live...
|
04.06.2012, 10:48 | #6 |
Форумчанин
Регистрация: 24.06.2010
Сообщений: 251
|
не знаю на счёт Хафмана, задание было разбить массив на отдельные блоки)
|
04.06.2012, 11:59 | #7 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
Ну, можно в лоб сделать примерно так:
1) Бежишь по массиву до первой попавшейся единички 2) Создаешь новый массив для этого куска 3) Запускаешь рекурсивную (или с помощью очереди) процедуру поиска единичек, образующих связанную с найденной область, попутно записывая их в созданный массив и обнуляя в старом массиве (чтобы не наткнуться на них позже) 4) если массив не закончился, возвращаешься к пункту 1 и ищешь дальше
Форматируйте код, будьте людьми.
|
04.06.2012, 12:35 | #8 |
Форумчанин
Регистрация: 24.06.2010
Сообщений: 251
|
Вот я не могу определится когда блок единичек закончился, чтобы приступить к поиску нового. (не получается условие составить)Ведь блоки могут быть разными, а также включать во внутрь себя ещё блоки.
|
04.06.2012, 13:29 | #9 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
в вашем случае можно просто делать полный обход по массиву
Код:
Форматируйте код, будьте людьми.
|
04.06.2012, 13:47 | #10 |
Форумчанин
Регистрация: 24.06.2010
Сообщений: 251
|
тоесть if(ch[x][y]==1)
{ Запускаем рекурсивную функцию } а в функции Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
CSS блоки | WindWdM | HTML и CSS | 0 | 16.02.2012 14:56 |
Блоки в CSS | WindWdM | Помощь студентам | 0 | 24.11.2011 15:03 |
Как со списка чисел отобрать только простые числа | SeRhy | Помощь студентам | 1 | 14.12.2007 12:06 |