IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Массив зиг-загом, Надо пройти массив змейкой.
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 168
Пол: Мужской

Репутация: -  3  +


Привет.
Я пробовал вот таким алгоритмом, но он не пашет.
Надо пройти массив зиг-загом и вывести каждое число на экран.
Например:
INput: 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Output: 13 14 9 5 10 15 16 11 6 1 2 7 12 8 3 4
 
║ i:=n; j:=1;
║ y:=1; x:=-1;
║ write(a[i,j],' ');
║ while (i<>1) and (j<>1) do begin
║ x:=x+2;
║ j:=j+1; write(a[i,j],' ');
║ while (i<>i-x) and (j<>j-x) do begin
║ inc(k);
║ i:=i-k; j:=j-k;
║ write(a[i,j],' ');
║ end;
║ i:=i-1; write(a[i,j],' ');
║ k:=0;
║ inc(y);
║ while (i<>i+y) and (j<>j+y) do begin
║ inc(k);
║ i:=i+k; j:=j+k;
║ write(a[i,j],' ');
║ end;

Изображение вот так.


Сообщение отредактировано: DarkWishmaster -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну для начала,непонятно какое первоначальное значение принимает ваше k... первое упоминание о нем, в том что вы выложили, лиш когда вы его повышаете (inc(k)).Во вторых,у вас 3 бегина и 2 энда...непонятно как организованы циклы.А в третьих,как я понял у вас идет 2 вложеных цикла и сложность алгоритма n в кубе,что не очень хорошо для больших матриц.

Я могу предложить вам такую идею,можете ее рассмотреть.

У нас есть 4 возможных направления движения.Вправо,вверх,влево-вверх,вправо-вниз.Что если организовать 1 цикл и в нем проверять,куда можно пойти с условием приоритетов ходов.Например.
Мы стартуем с точки (n;1)сначала мы проверяем можем ли мы сделать шаг влево-вверх,нет не можем,выходим за граници,тогда проверяем можем ли мы сделать шам вправо,да можем идем туда,теперь мы в (n;2),проверяем можем ли мы вверх-влево,да можем идем туда.Тперь мы в (n-1;1),проверяем вверх влево,нет не можем.смотрим вправо,да можем.тогда проверяем,какой был предыдущий шаг,он был вверх-влево,тогда проверяем можем ли мы вверх,,если да то идем вверх.если нет то идем вправо.Да мы можем, идем в верх.

Ну и так далее.В общем мы создаем приоритеты по направлению движения и ставим условия так,чтобы у нас нельзя сделать шаг после вверх-влево сразу вправо,если у нас есть возможность сдвинуться вверх.ну и другие подобные ходы.Сложность этого алгоритма N,что достаточно выгодно для больших матриц,правда с условиями надо достаточно сильно проработать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.06.2024 17:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name