2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Задача 'Канадские авиалинии'
Сообщение14.09.2008, 20:29 


09/09/08
31
Львів.
Все привет! Помогите юному программисту с решением одной задачи (на паскале). Как будет выглядеть алгоритм поиска пути в задаче?
p.s. эта задача из IOI 93. спасибо заранее!!!!

Задача 'Канадские авиалинии'

Вы победили в соревновании, организованном Канадскими авиалиниями. Приз - бесплатное путешествие по Канаде. Путешествие начинается с самого западного города, в который летают самолеты, проходит с запада на восток, пока не достигнет самого восточного города, в который летают самолеты. Затем путешествие продолжается обратно с востока на запад, пока не достигнет начального города. Ни один из городов нельзя посещать более одного раза за исключением начального города, который надо посетить ровно дважды (в начале и в конце пу- тешествия). Вам также нельзя пользоваться авиалиниями других компаний или другими способами передвижения. Задача состоит в следующем: дан список городов и список прямых рейсов между парами городов; найти маршрут, включающий максимальное количество городов и удовлетворяющий вышеназванными условиям. Несколько наборов входных данных помещены в ASCII-файл C:\IOI\ITIN.DAT. Каждый набор содержит:
в первой строке - количество городов N, в которые летают самолеты, и количество прямых рейсов V. N - положительное целое число, меньшее или равное 100. V - положительное целое число;
в каждой из следующих N строк - название города, в который летают самолеты. Названия упорядочены с запада на восток, то есть i-ый по порядку город находится восточнее j-го тогда и только тогда, когда i> j (не существует городов на одном меридиане). Название каждого города - строка, состоящая из не более, чем 15 цифр и/или латинских букв, например: AGR34 или BELA
в каждой из следующих V строк - названия двух городов из списка городов, разделенные пробелом. Если пара ГОРОД1 ГОРОД2 содержится в строке, это означает, что есть прямой рейс из ГОРОД1 в ГОРОД2, а также прямой рейс из ГОРОД2 в ГОРОД1.

Различные наборы входных данных разделены пустой строкой. После последнего набора данных пустой строки не будет. Пример файла входных данных C:\IOI\ITIN.DAT:

Входные данные корректны, и их проверка не требуется. Решения, полученные для каждого набора входных данных, должны быть последовательно записаны в выходной ASCII-файл C:\IOI\ITIN.SOL следующим образом:
в первой строке - общее количество городов из входного файла;
в следующей строке - число M, равное количеству различных городов, посещаемых на маршруте;
в следующих M+1 строках - названия городов по одному в строке в порядке их посещения.

Обратите внимание, что исходный город должен быть также выведен последним. Если для набора входных данных не существует решения, то для этого набора в выходном файле C:\IOI\ITIN.SOL должны быть только две записи: общее количество городов и сообщение "NO SOLUTION" (нет решения). Решения для разных наборов входных данных должны разделяться в выходном файле пустой строкой.

 Профиль  
                  
 
 
Сообщение15.09.2008, 10:37 


31/08/08
88
Харків
Кроме рекурсивного обхода я навскидку не вижу. Если двигаться только в одном направлении, то можно было бы оптимизировать граф, но с "туда-обратно" нет идей как оптимизировать - оптимальный вариант для "туда" может дать неоптимальное общее решение.

Рекурсивно "в лоб" будет не очень эффективно. Но суть проста - выбираем первый возможный перелет из данного города и решаем задачу для заново, считая отправной точкой второй город.

Можно ли уменьшить вычислительную сложность отсекая варианты - не знаю, не вижу как не доходя до конца определить, что данный вариант хуже уже найденных, можно видеть только улучшение.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group