Страница 1 из 1

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

Добавлено: 18 янв 2014, 19:29
romanu416
Прошу помощи в решении задачи.
Я не могу поняты как это сделать потому прошу вашей помощи.

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

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

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

3.вивид:
450

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

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

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

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

Для второй части не могу написать алгоритм даже на псевдоязыке, так как не знаю, как хранятся данные в таблице расстояний. Если пользователь строки расстояний вводит руками, то для того, чтобы получить нужные данные, придётся немного повозиться, находя в полной строке начало второго города и начало позиции, где указано расстояние. Но в любом случае, ничего сверхъестественного в задаче нет.

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

Добавлено: 21 янв 2014, 11:14
WinMain
Вначале нужно создать массив с именами городов. Например так:

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

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];