Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.11.2021
Сообщений: 4

Графы. Поиск маршрута

14.12.2021, 01:00. Показов 651. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые программисты. Помогите, пожалуйста, решить задачу.
Задание звучит вот так:
В городе N перекрестков. Любые два перекрестка соединены между собой ровно одной дорогой с двусторонним движением. Расстояния между перекрестками записаны в виде матрицы N×N (число в позиции i,j обозначает длину дороги, соединяющей i-е и j-е перекрестки). Длина каждой дороги не превышает 1000 метров.
В этом городе живет студент Женя, очень желающий получить права на управление автомобилем. Сегодня, на практическом занятии по вождению, нашему герою необходимо сдать небольшой тест – без ошибок преодолеть 3 перекрестка. Но поскольку наш студент максимально хочет сэкономить на бензине, он хочет, чтобы его маршрут был максимально коротким. Кроме того, Женя считает, что на коротком маршруте меньше шансов совершить неправильный маневр и тем самым провалить тест.
Помогите нашему герою с выбором оптимального маршрута.

Входные данные:
В первой строке записано число N (3 ≤ N ≤ 100), а последующая матрица N×N расстояний между перекрестками. Все числа в матрице (кроме стоящих на главной диагонали) – натуральные, не превышающие 1000. Матрица симметрична относительно главной диагонали, на главной диагонали стоят 0.

Пример данных
5
0 20 10 30 40
20 0 30 1 2
10 30 0 40 1000
30 1 40 0 21
40 2 1000 21 0

Не могу решить данную задачу
Прошу очень сильно


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#define _CRT_SECURE_NO_WARNINGS
 
#include <cstdio>
 
//int $((freopen("input.txt","r",stdin),/*freopen("output.txt","w",stdout),*/0));
 
#define MAXN 128
 
unsigned g[MAXN][MAXN];
 
int main(void)
{
  unsigned n, q, w, e, cur, a, b, c, best;
 
  scanf("%u", &n);
  for(q=0; q<n; ++q)
    for(w=0; w<n; ++w)
      scanf("%u", g[q]+w);
 
  best=~0U;
  for(q=0; q<n; ++q)
    for(w=0; w<n; ++w)
      if(q!=w)
        for(e=0; e<n; ++e)
          if(e!=w && e!=q && (cur=g[q][w]+g[w][e]+g[e][q])<best)
            best=cur, a=q, b=w, c=e;
 
  printf("Cycle %u -> %u -> %u -> %u has length %u\n", a+1, b+1, c+1, a+1, best);
 
  return 0;
}
Данные должны браться из файла input.txt, а результат записываться в output.txt
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2021, 01:00
Ответы с готовыми решениями:

Динамическое программирование, поиск маршрута
Возможно ли организовать поиск пути с препятствием, используя динамическое программирование? Т.е. что то типа лабиринта.

Поиск маршрута от одной точки до другой
Добрый день! подскажите возможно ли разработать скрипт для определения расстояния (маршрута) одной точки до другой? На основе данных яндекс...

проблема с задачей на поиск оптимального маршрута
Бандит хочет ограбить n банков, все банки расположены на прямой. Позиция банка с номером i характеризуется целым числом a(i) —...

1
 Аватар для palva
4272 / 2966 / 691
Регистрация: 08.06.2007
Сообщений: 9,915
Записей в блоге: 4
14.12.2021, 02:34
Если я правильно понял, нужно проехать через три перекрестка. Длиной маршрута будет сумма расстояний от 1 до 2 перекрестка и от 2 до 3. Если в качестве среднего перекрестка взять i-ый, то эти расстояния должны найтись в строке i в столбцах соответствующих первому и третьему перекрестку. Для минимизации суммы достаточно выбрать два самых маленьких элемента строки (исключая диагональный элемент). Получится маршрут из трех перекрестков. Проделываем это для каждой строки, находя наименьшую длину такого маршрута.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.12.2021, 02:34
Помогаю со студенческими работами здесь

Алгоритм Дейкстра. Поиск кратчайшего пути с запоминанием маршрута
Всем привет, есть алгоритм Дейкстра, который находит минимальный маршрут из главной вершины во все остальные. Как сделать, чтобы помимо...

графы. поиск в глубину
Здраствуйте. Вот такая задача N шестеpенок пpонумеpованы от 1 до N (N ≤ 10). Заданы M (0 ≤ M ≤ 45) соединений паp шестеpенoк...

Поиск в глубину. Графы С++
Файл открывается, с этим проблем нет. Подскажите, как передать матрицу смежности чтобы далее выполнить обход графа в глубину? ...

Поиск в глубину. Графы. С++
Задана ,допустим, такая матрица смежности 0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 Node.h #pragma once

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru