![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Путешествие на хамелеоне
Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или output.txt Вот уже несколько лет в Зазеркалье проводится удивительная игра – «Гонки на хамелеоне». Игра состоит в следующем: имеется игровое поле размером NxМ, каждая клетка поля покрашена в некоторый цвет, который кодируется целым числом от 1 до К (1<=K<=10000). Игрок, верхом на хамелеоне, должен пробраться из верхней левой клетки игрового поля в нижнюю правую, при этом потратив минимальное количество яблок. Яблоко приходится отдать хамелеону за то, что он меняет свой цвет, попав в клетку другого цвета. Изначально хамелеон находится в клетке с координатами (1, 1), и имеет ее цвет. Он может перемещаться в 4-х направлениях в любую соседнюю клетку, имеющую с текущей общую сторону. Задание: определите минимальное количество яблок, которое придется скормить хамелеону, чтобы осуществить указанное путешествие. Формат ввода Первая строка содержит два числа N и М – размер игрового поля (2<=N, М<=100). Далее следует N строк, каждая содержит по М целых чисел, разделенных пробелом, кодирующих цвет клетки (1..10 000). Формат вывода Выходной файл должен содержать целое неотрицательное число – минимальное количество яблок, которые придется скормить хамелеону. Пример 1 Код:
Код:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Утро доброе.
Задача, представленная выше была на городском этапе всероссийской олимпиады школьников по программированию(или информатике.. фиг знает) Дык вот Хотелось бы узнать, какое решение можно по праву назвать лучшим. Вот это на полный балл Код:
Написал некий аналог bfs. Фишка в том, что bfs требует, чтобы первый найденный путь и был оптимальным, в нашем случае это ессесно не так.. Тогда я решил использовать кучу (aka очередь с приоритетом), чтобы хранить и быстро выбирать минимальный элемент (а он выбирается так : минимальный вес на текущий момент, если же у нас есть несколько элементов с минимальным весом, то я выбираю тот, у которого № волны меньше) Код:
Вот такой вот вердикт тестирующей системы Код:
Код:
Ах да, к сожалению, свой логин\пароль я потерял, и тестирую на сайте с аккаунта друзей.. Посему дать его Вам я не могу, уж пардоньте.. И еще.. Тестирующая система кушает код только на крестах и паскале (Free\Delphi) Последний раз редактировалось Poma][a; 11.02.2015 в 08:39. |
![]() |
![]() |
![]() |
#3 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]()
Первый алгоритм оптимален. Лично я не вижу как этот АЛГОРИТМ можно оптимизировать, разве что эвристикой...
Я не понял откуда 5000 в примере, если это количество яблок - то должно быть 10000. Мне кажется bfs тут неуместен.Или ты должен будешь запустить его 10 тысяч раз для разного количества яблок, но врядли это будет эффективнее. |
![]() |
![]() |
![]() |
#4 | ||
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]() Цитата:
Код:
Код:
Цитата:
Последний раз редактировалось Poma][a; 11.02.2015 в 08:45. |
||
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
Я понимаю, что в 1-м алгоритме 10'000 было бы уместнее. А если добавить проверку на то, что во время очередной итерации по k путь (p[][]) не был улучшен и в таком случае прекратить поиск.
В поиске по алгоритмам на графах (e-maxx) увидел название "алгоритм Дейкстры за O (M log N)", который бы сюда подошёл. Но еще не успел с ним ознакомиться. |
![]() |
![]() |
![]() |
#6 | |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]() Цитата:
Нам просто не сделать такой граф |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
А по поводу "добавить проверку на то, что во время очередной итерации по k путь (p[][]) не был улучшен и в таком случае прекратить поиск"?
|
![]() |
![]() |
![]() |
#8 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Щас напишу
Все прошло! Пасиб Но все равно не нравится.. Хочется чего-нить более оптимального.. Последний раз редактировалось Poma][a; 11.02.2015 в 09:14. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
Оптимально - от [1,1] последовательно искать минимальные пути ко всем узлам графа. И на основе минимумов продвигаться к следующему узлу. Возможно, улучшая предыдущие оценки.
|
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Если мы будет улучшать предыдущие оценки, то нужно будет все снова пересчитывать..
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача "Построение оптимального ж/д пути" (Delphi, курсовая работа) | RomBe | Фриланс | 7 | 24.02.2014 17:18 |
Поиск оптимального пути из точки A в точку Б | spirit-ua | Общие вопросы Delphi | 5 | 14.02.2014 13:36 |
Нахождения оптимального пути | linkoln_7 | Общие вопросы C/C++ | 1 | 02.02.2014 00:18 |
создание графа по матрице и поиск кратчайшего пути из одного графа в другой | lexflax | Общие вопросы C/C++ | 1 | 06.09.2012 07:32 |
"Поиск оптимального пути движения снегоочистительных машин с учетом приоритета дорог" Пролог | Kvax | Помощь студентам | 4 | 21.12.2008 22:18 |