![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
Paulskit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.11.2007 Репутация: нет Всего: нет |
Задачка по консольному С/С++
Есть N городов. Для каждой пары городов можно построить дорогу такую, которая бы не заходила в другие города. Собственно нужно найти такую дорогу количество шагов в которой было бы минимально. Как сделал я - строится матрица (например 6х6), дальше, случайным образом генерируются N городов. Дальше идет выбор начального пункта и пункта назначения (записываю их координаты). Но вот как найти наименьший путь пока не могу придумать. Пробовал перебирать ячейки через switch + random (то есть в switch возможные шаги и рандомом их выбираем) - в принципе дорогу прокладывает, но зачастую она очень не рациональна (то есть или куча лишних шагов или идет по одному из самых длинных путей), ну и потом - слишком много "холостого хода" - очень часто алгоритм выдает что-то типа - подняться на 1 вверх, спуститься на 1 вниз (естественно такая возможность в программе исключена - но все равно итерация потеряна). В общем помогите с алгоритмом. ![]() |
|||
|
||||
GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 4 Всего: 14 |
ДА УЖ... Рандомом пользоваться в таких ращетах, эт круто ![]() Добавлено через 4 минуты и 34 секунды Где-то такое я уже встречал, там метод конкретный использовался, не помню какой. Я бы сделал просто, создал бы цикл в которм конкретно перебирал города (строился путь), после каждой постройки пути, записывал бы в объект координаты и их последовательность. Попробую написать если время будет ![]() -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
Paulskit |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.11.2007 Репутация: нет Всего: нет |
Та я сам понимаю - потому и написал сюда ибо алгоритма пока придумать не могу.
Так смысл в том чтобы обходить города. Или я не правильно понял смысл вашего предложения ? Это сообщение отредактировал(а) Paulskit - 3.5.2008, 14:26 |
||||
|
|||||
orthrus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 400 Регистрация: 30.10.2007 Где: г. Усть-Илимск(Ир кутская обл.) Репутация: 5 Всего: 16 |
Тут вам скорее с графами нужно мутить. Вот тут есть описания алгоритмов для нахождения кратчайшего пути.
-------------------- У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой ![]() |
|||
|
||||
Paulskit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.11.2007 Репутация: нет Всего: нет |
Там везде описывается поиск кратчайшего пути по вершинам, а не обходя их. Пробовал алгоритм Дейкстры. Но опять же он предпологает наличие расстояний между городами. Я уже придумал алгоритм нахождения расстояний (на листочке, может он и не совсем рациональный, но длина всегда определяется правильно - вот только написать на С++ я его пока не могу). Может у кого есть проверенный алгоритм поиска расстояний от одной точки к другой обходя другие ? Это сообщение отредактировал(а) Paulskit - 4.5.2008, 15:05 |
|||
|
||||
t_gran |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 13.11.2007 Где: г.Усть-Илимск Репутация: 33 Всего: 37 |
Расстояние от одной точки до другой это школьная математика:
len^2= X^2 + Y^2 (теорема Пифагора ![]() где X - разность расстояний по оси X, а Y - разность расстояний по оси Y. А всё остальное, как orthrus писал ![]() -------------------- Я знаю, что ничего не знаю© Сократ ![]() |
|||
|
||||
Paulskit |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.11.2007 Репутация: нет Всего: нет |
Теорема Пифагора в постановке этой задачи - это жесть. Как вы себе это представляете на квадратной матрице ? В общем я написал так:
P.S. Точка начало - "0", пустая (проходимая) область - "127", k - размер кв. матрицы Это сообщение отредактировал(а) Paulskit - 14.5.2008, 21:08 |
||||
|
|||||
Kakadu |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: 7 Всего: 7 |
Мне очень кажется что тут нужен обход графа поиском в глубину...
-------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
|||
|
||||
Paulskit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.11.2007 Репутация: нет Всего: нет |
Ну уже незачем - с кодом выше отлично работает поиск. А построение просто - находим минимальный элемент около точки финиша и двигаемся в направлении к нулю.
Сегодня увидел другой вариант задачи - города-вершины графа, расстояния забиваются через рандом, каждый город соеденен с любым другим непосредственно. Собственно так же найти минимальный путь, но уже строить его не нужно. Тут думаю алгоритм Дейкстры отлично подойдет. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |