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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2008, 11:37   #1
mustafa1453
 
Регистрация: 16.07.2008
Сообщений: 4
Восклицание Помогите решить логическую задачу!!!

Задача состоит вот в чём: у нас есть две матрицы(размером скажем так 5*5). В каждой матрице есть набор цифр, и одна пустая клетка. Цифри в матрицах совпадают(тоесть если в первой есть три "6"-и, то и во второй тоже должно быть три "6"-и), но порядок размещения отличаеться в каждой матрице. Пустые клетки тоже отличаються размещением. Задача состоит в том, чтобы "передвигаем" цифр во второй матрице(двигать можно только вертикально или горизонтално, но НЕ по диогонали) получить матрицу №2,такую чтобы она была похожа на матрицу №1. Если в укороченом виде, то это игры пятнашки, вот только цифры тут идут не от "1" до "15", а цифры могут поворяться. Матрица №1 выступает как образец, под который надо настроить матрицу №2.

Значит в начален програмы мы должны задать элементы обеих матриц, а вконце програмы мы должны получить файл(текстовый), в котором описано как двигать элементы второй матрицы(Например:Element[1.4] to right, Element[3.2] to Up и т.д.)

Я прошу помощи в виде алгоритма, програму я сам сделаю...
mustafa1453 вне форума Ответить с цитированием
Старый 16.07.2008, 15:37   #2
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Вроде так должно работать
Пока массивы не равны, сравниваем по очереди каждый элемент 2о массива с 1м.Если элементы не равны,тогда смотрим положение элемента в 1м массиве (строка, столбец) и сравниваем со вторым.
Смотрим строку - если меньше в цикле перемещаем элемент вниз, больше - перемещаем вверх, пока строка не совпадет. потом аналогичные действия со столбцом. И так делать с каждым элементом, пока массивы не станут равны. Попробуй вроде должно получиться.
Прогрессирующий чайник..
The_Darkness вне форума Ответить с цитированием
Старый 16.07.2008, 16:40   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от The_Darkness
Вроде так должно работать
эх, земляк, если бы всё так было просто...
Так не получится - ты забыл про
Цитата:
Сообщение от mustafa1453
В каждой матрице есть набор цифр, и одна пустая клетка.
нужно делать "решалку" игры "15". и, честно говоря, я сейчас толковый алгоритм решения задачи себе не представляю... ;-(((
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.07.2008, 17:16   #4
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Хм.. а есть ограничения на число? если именно решалка игры 15 - пустую клетку обзываем нулем, и не паримся =)
Пустая клетка в матрице чисел, должна быть числом.
Если я конечно не совсем еще дерево, у пустой клетки должно быть какое то значение. И это значение так же можно присваивать
Даже если рассматривать матрицу не из чисел а из строк, и пустую клетку обозначать ' ', принцип не меняется. Нам не важно, что в элементе, нам важно чтобы они были равны!
Прогрессирующий чайник..

Последний раз редактировалось The_Darkness; 16.07.2008 в 17:26.
The_Darkness вне форума Ответить с цитированием
Старый 16.07.2008, 17:55   #5
embedder
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 25
По умолчанию

Нашел алгоритм с кодом для игры пятнашки. Хочу только заметить, что бывают нерешаемые комбинации.
http://articles.org.ru/cn/showdetail.php?cid=5956
embedder вне форума Ответить с цитированием
Старый 16.07.2008, 18:40   #6
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Уважаемые, каким образом производится перемещение?? Если перемещать можно, просто меняя местами блоки, это одно. Если перемещать можно только в пустую клетку, это же совсем другая задача!И тогда мой алгоритм в корне не верен. Поясните пожалуйста вопрос с перемещением.
Прогрессирующий чайник..
The_Darkness вне форума Ответить с цитированием
Старый 16.07.2008, 18:46   #7
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Для перемещения только в пустой блок, нужно просто соответствующе оформить смену блоков местами(то есть сначала мы должны переместить пустой блок и т.д.) в принципе сверх сложного ничего нет, надо просто подумать =)
Прогрессирующий чайник..
The_Darkness вне форума Ответить с цитированием
Старый 16.07.2008, 20:03   #8
embedder
Пользователь
 
Регистрация: 24.05.2008
Сообщений: 25
По умолчанию

Цитата:
Сообщение от The_Darkness Посмотреть сообщение
в принципе сверх сложного ничего нет, надо просто подумать =)
да это всегда так =)
Задачу решить просто! Трудно выловить всех чертей в нюансах =)
embedder вне форума Ответить с цитированием
Старый 16.07.2008, 20:19   #9
The_Darkness
Пользователь
 
Регистрация: 06.01.2008
Сообщений: 83
По умолчанию

Цитата:
Трудно выловить всех чертей в нюансах
Их ловить не надо)) Они сами лезут=)
Прогрессирующий чайник..
The_Darkness вне форума Ответить с цитированием
Старый 16.07.2008, 21:01   #10
mustafa1453
 
Регистрация: 16.07.2008
Сообщений: 4
По умолчанию

Большое спасибо embedder ... Хотя этот алгоритм и не совсем то что мне нужно, но и с его помощью я смогу что-нибудь сделать. Также большое спасибо всем кто откликнулся... Вижу задачу вы поняли правильно, нужно перемещать только в пустую клетку. The_Darkness идея с "0" мне понравилась, учту. Но в задаче есть одна маленькая но важная заковыка, нужно все это проделать за минимальное количество передвижений.
mustafa1453 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу, please! CRUMB Помощь студентам 3 08.12.2008 18:02
Помогите решить задачу Chuvak Общие вопросы C/C++ 3 07.06.2008 09:48
Помогите решить задачу. Shady Общие вопросы Delphi 7 10.11.2007 23:09