Длина пути между городами

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
romanu416
Сообщения: 6
Зарегистрирован: 29 окт 2013, 02:04

Прошу помощи в решении задачи.
Я не могу поняты как это сделать потому прошу вашей помощи.

Надо найти путь который прошел автомобиль, мы пишем через какие города он ехал, а программа находит путь который он прошел.

1.Данные расстояния между городами для примера.
Львов-Киев = 300
Тернополь-Львов = 100
Харьков-Львов = 400
Киев-Тернополь = 350
Киев-Харьков = 150
Тернополь-Харьков = 450

2.Приклад ввода:
Львов
Киев
Харьков

3.вивид:
450
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Идём по списку посещённых городов, причём берём города парами. К примеру, если городов было указано N, то проходим мы так:

Код: Выделить всё

Цикл i от 1 до N-1
{
   Годод1 = Города[i];
   Город2 = Города[i+1];
}
Теперь мы должны поискать в табличке рассрояний между городами либо пару Город1-Город2, а если не нашли, то пару Город2-Город1. В случае удачного поиска берём соответствующее расстояния и добавляем к перменной, аккумулирующей сумму расстояний.

Для второй части не могу написать алгоритм даже на псевдоязыке, так как не знаю, как хранятся данные в таблице расстояний. Если пользователь строки расстояний вводит руками, то для того, чтобы получить нужные данные, придётся немного повозиться, находя в полной строке начало второго города и начало позиции, где указано расстояние. Но в любом случае, ничего сверхъестественного в задаче нет.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Вначале нужно создать массив с именами городов. Например так:

Код: Выделить всё

char* cities[] = 
{
	“Киев”,
	“Харьков”,
	“Львов”,
	“Тернополь”
};
Города при этом будут проиндексированы, и маршрут движения можно описывать не словами, а цифрами. Примерно так: 1, 0, 2, что будет означать «Харьков — Киев — Львов».

Расстояние между городами лучше описать в виде квадратной матрицы, размерность которой соответствует числу городов. В нашем случае это 4х4. В языке С/С++ это будет описываться как двумерный массив чисел. Ну вот как-то так:

Код: Выделить всё

int intervals[4][4] = 
{
	{0, 150, 300, 350},
	{150, 0, 400, 450},
	{300, 400, 0, 100},
	{350, 450, 100, 0},
};
В итоге расстояние для маршрута 1 — 0 — 2 будет вычисляться как

Код: Выделить всё

intervals[1][0] + intervals[0][2];
Ответить