| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Pascal] Задача "Перегоны" |
| Автор: Denic 18.11.2006, 03:54 |
| Помогите решить задачу: На некоторой железнодорожной ветке расположено N станций, которые последовательно пронумерованны от 1 до N. Известны расстояния между некоторыми станциями. Надо вычислить длинны всех перегонов между станциями или указать, что это сделать нельзя (т.е информация либо противоречит или её недостаточно). Даже незнаю как возможно есть какие-нибудь мысли или хотя бы алгоритм решения. |
| Автор: maxim1000 18.11.2006, 14:43 |
| можно попробовать свести это к системе линейных уравнений (относительно попарных расстояний между соседними станциями) а там уже посмотреть есть ли решения |
| Автор: Snowy 18.11.2006, 14:51 |
| Перенесено из Паскаля |
| Автор: AlexST 18.11.2006, 21:16 |
| Строим граф по принципу: вершины связаны между собой, если известно расстояние между ними (лучше сразу в виде матрицы). Проверяем: если из любой вершины можно попасть в любую, то задание решаемо. Как найти расстояния писать надо? |
| Автор: Denic 18.11.2006, 23:26 | ||
| Не надо Да скорее всего, я тут подумал и придумал как решать, надо завети квадратную матрицу
А дальше, я так думаю, надо вычислить неизвестные растояния. И посмотреть что получится. Диагональ над главной, будет ответом. |
| Автор: AlexST 19.11.2006, 13:47 | ||||
Зачем везде 1? Нуль тогда уж...
Вот тут надо следить, что бы все элементы были расположены над гл. диагональю
Дальше проверяем возможно ли связать все точки друг с другом. Здесь достаточно найти хотя бы один путь, проходящий по всем вершинам. Потом вычисляем пути. Т. е. заполняем все клетки над диагональю. Здесь напрашиваются закономерности: [i, j]=[j-1, i]+[i, j-1] [i, j]=[i-1, j]-[i-1, i] [i, j]=[i, j+1]-[i, j+1] Список можно продолжать. Теперь надо подумать как это организовать (итерации по вычислению путей, в смысле). Счас нет времени, подумаю - напишу ещё. Да, откуда задача? |
| Автор: AlexST 22.11.2006, 22:22 | ||
Да хоть -800. Думал сёдня уже код дам, ан нет... P. S. Сосредотачиваться на возможности связать все точки друг с другом я не буду. Понятно: берем любую вершину и проверяем, можно ли из неё попасть во все остальные. |
| Автор: Denic 23.11.2006, 06:43 | ||
По моему задача не такая уж сложная, я тут набросал программку её надо ещё доделать, но она вроде всё правильно считает осталось, только сделать проверки на корректность данных и вывести результаты. Нужные числа над главной диагональю.
там тоже нечего сложного я думаю лучше сначала вычислить, а потом проверять. При корректных данных в массиве в строках числа от 0 (от главной диагонали) должны идти по возрастанию. |
| Автор: AlexST 23.11.2006, 14:18 |
| Не, ну всё далеко не так просто. Сделаю скоро. P. S. Главную диагональ нет смысла обрабатывать. Думается мне, что матрицу в топку. Какие данные в твою прогу я не вводил - одно безобразие. )))) Хотя оно и понятно. Вот тебе три матрицы. Тестируй прогу. ![]() |
| Автор: maxim1000 23.11.2006, 15:52 |
| хм... создаётся впечатление, что моё предложение все просто пропустили может, конечно, я ошибаюсь, но после представления задачи в виде системы линейных уравнений, она становится тривиальной... |
| Автор: AlexST 23.11.2006, 15:54 | ||
|