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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2009, 12:22   #1
iness
Новичок
Джуниор
 
Регистрация: 13.11.2009
Сообщений: 3
По умолчанию Обход ячеек по спираль с произвольным центром.

Здравствуйте! Мне нужна Ваша помощь.

Нужно составить программу обхода ячеек массива по спирали до нахождения значения "0". Начало обхода запрашивается с клавиатуры.
При этом проверив ячейку однажды повторно она не проверяется.
iness вне форума Ответить с цитированием
Старый 14.11.2009, 12:27   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) что уже сделали?
2) Массив двухмерный? Тогда лучше называть его матрицей! И какой размер матрицы?
3) правила обхода? если в матрице 5 на 5 (к примеру), выбрана ячейка, например, во 2-й строке чётвёртая.
Какая следующая будет по пути обхода? напишите (а лучше нарисуйте) схему обхода!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2009, 15:00   #3
iness
Новичок
Джуниор
 
Регистрация: 13.11.2009
Сообщений: 3
По умолчанию

Массив двумерный, произвольный
Обход можно начинать в любую сторону.
Например так:


Спираль пока не получается, сделала проверку окрестными строками и столбцами
iness вне форума Ответить с цитированием
Старый 15.11.2009, 15:40   #4
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Заведите метки минимума и максимума в обеих направлениях, на каждом витке разводите эти ограничения, а для проверки "финиша" заведите дополнительный счетчик, который будет увеличиваться на 1 при каждом проходе через ячейку основной матрицы. Когда он достигнет общего количества ячеек матрицы, - обход закончен. Вначале минимальный икс=максимальный икс=икс начальный, аналогично с игреком.
З.Ы. Почитал условие - надо так же прицепить вторую проверку, на нахождение ноля в основной матрице.
LeBron вне форума Ответить с цитированием
Старый 15.11.2009, 20:56   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я, наверное, тупой... не могу понять, по какому правилу осуществляется переход на другую строку, если достигаем границы матрицы... ;(

вот, если начинаем обход с элемента [1,1] (3) следующий элемент на один вниз [1,2] (4),
а следующий должен быть элемент левее 4-ки... это какой будет?
ну и, аналогично, если начать с 2-ки ([7,7]) следующим будет 1 [8,7], потом 7 - 3 - 8 - 5 - а потом?!?!


А в целом и общем, я согласен с алгоритмом, предложенным LeBron...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2009, 21:18   #6
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я, наверное, тупой... не могу понять, по какому правилу осуществляется переход на другую строку, если достигаем границы матрицы... ;(
Проще всего понять правило перехода, представив себе, что слева и сверху тоже есть "невидимая матрица".
LeBron вне форума Ответить с цитированием
Старый 16.11.2009, 10:09   #7
iness
Новичок
Джуниор
 
Регистрация: 13.11.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я, наверное, тупой... не могу понять, по какому правилу осуществляется переход на другую строку, если достигаем границы матрицы... ;(

вот, если начинаем обход с элемента [1,1] (3) следующий элемент на один вниз [1,2] (4),
а следующий должен быть элемент левее 4-ки... это какой будет?
ну и, аналогично, если начать с 2-ки ([7,7]) следующим будет 1 [8,7], потом 7 - 3 - 8 - 5 - а потом?!?!


А в целом и общем, я согласен с алгоритмом, предложенным LeBron...

Если окрестности точки представляют полный обход, то это будет "круг"
если упираются в одну границу, то это будет напоминать букву "П" (скоба в любом направлении)
если упирается в две границы, то это будет напоминать букву "Г" (угол в любом направлении)
если у упирается в три границы, то это будет линия

У меня пока мысли сделать так:
сохранить массив во вспомогательном так, чтобы выбранная точка оказалась в центре и применить обычный обход по спирали, но не знаю насколько это оптимально... ведь массив может быть большим...
iness вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
логарифмическая спираль с++ salmanov Помощь студентам 0 23.06.2009 21:17
Дан круг с центром в точке А1 и радиусом R. DomiR Помощь студентам 16 29.05.2009 12:42
Как можно организовать открытие папки с содержащимся в нем произвольным файлом Sewell Общие вопросы Delphi 5 27.05.2009 22:11
Циклы с произвольным количеством шагов Walter Помощь студентам 11 09.11.2008 16:53
Проблема с загруз центром [Smarik] PHP 0 16.03.2008 15:36