Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2024, 23:42   #1
leksi223
Новичок
Джуниор
 
Регистрация: 14.05.2024
Сообщений: 6
По умолчанию Помогите пожалуйста найти ошибку в программе

Условия задачи: Имеются n городов. Некоторые из них соединены двусторонними дорогами, причем для каждой дороги известна максимальная масса груза, который можно по ней везти одним транспортным средством. Напишите программу для определения минимального числа поездок, которое придется совершить из города А в город В, чтобы доставить х тонн продукции при условии, что предприниматель использует только одну фуру грузоподъемностью 20 тонн. При входных данных: 5 городов, грузоподъемность 40, матрица смежности: 0 15 0 0 0 15 0 10 30 0 0 10 0 0 20 0 30 0 0 10 0 0 20 10 0 Из города 0 в город 4, должно получится 4 дороги. А программа считает 6
Код:
 #include <limits.h>

#define MAXN 100 // Максимальное количество городов
#define MAX_WEIGHT 20 // Максимальная грузоподъемность фуры

// Функция для поиска минимального числа поездок с использованием BFS
int minTrips(int n, int graph[MAXN][MAXN], int start, int end, int totalWeight) {
    int trips[MAXN];
    for (int i = 0; i < n; i++) {
        trips[i] = INT_MAX;
    }

    int queue[MAXN];
    int front = 0, rear = 0;

    trips[start] = 0;
    queue[rear++] = start;

    while (front != rear) {
        int u = queue[front++];
        for (int v = 0; v < n; ++v) {
            if (graph[u][v] > 0 && trips[v] > trips[u] + 1) {
                trips[v] = trips[u] + 1;
                queue[rear++] = v;
            }
        }
    }

    if (trips[end] == INT_MAX) {
        return -1; // Если нет пути из города A в город B
    }

    // Рассчитываем минимальное количество поездок для доставки x тонн продукции
    int requiredTrips = (totalWeight + MAX_WEIGHT - 1) / MAX_WEIGHT; // Округляем вверх
    return trips[end] * requiredTrips;
}

int main() {
    int n;
    printf("Введите количество городов: ");
    scanf("%d", &n);

    int graph[MAXN][MAXN];
    printf("Введите матрицу смежности (или весов) для графа:\n");
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            scanf("%d", &graph[i][j]);
        }
    }

    int start, end, totalWeight;
    printf("Введите начальный город (A): ");
    scanf("%d", &start);
    printf("Введите конечный город (B): ");
    scanf("%d", &end);
    printf("Введите количество тонн продукции: ");
    scanf("%d", &totalWeight);

    int result = minTrips(n, graph, start, end, totalWeight);

    if (result == -1) {
        printf("Невозможно доставить продукцию из города %d в город %d\n", start, end);
    } else {
        printf("Минимальное количество поездок: %d\n", result);
    }

    return 0;
}
leksi223 вне форума Ответить с цитированием
Старый 15.05.2024, 00:23   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Если верно понял код, то у вас в массиве trips будет минимальное количество городов по дороге от А до Б, а нужно найти самую широкую дорогу от А до Б (Задача о самом широком пути).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 15.05.2024, 00:42   #3
leksi223
Новичок
Джуниор
 
Регистрация: 14.05.2024
Сообщений: 6
По умолчанию

Не очень понял, извините. Необходимо переписать массив?
leksi223 вне форума Ответить с цитированием
Старый 15.05.2024, 01:48   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Вот граф городов по этой матрице смежности. Вы едете из "a" в "e". В "trips[4]" у вас число 3, т.е. нужно проехать по 3 ребрам графа (по 3 дорогам), чтобы попасть из города "a" в "e". Но нужно найти не минимальное количество ребер на пути, а такой путь, чтобы разрешенная масса груза на ней была максимальна. В данном случае есть два пути из "a" в "e": a-b-c-e, a-b-d-e, но на обоих максимальная масса груза ограничена 10. Поэтому понадобится 4 поездки, чтобы перевезти 40 тонн.
Изображения
Тип файла: png download.png (32.5 Кб, 18 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 15.05.2024, 06:37   #5
leksi223
Новичок
Джуниор
 
Регистрация: 14.05.2024
Сообщений: 6
Радость

Спасибо Огромное!!!
leksi223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста найти ошибку в коде,не пишите новый лишь помогите найти проблему Shpite Shpinnete Помощь студентам 2 06.02.2023 05:11
Помогите пожалуйста найти ошибку в программе на с++ YursS Помощь студентам 2 12.06.2018 23:30
Пожалуйста, помогите найти ошибку в программе Марина357 Помощь студентам 2 23.11.2015 00:20
помогите на найти ошибку в программе SYL@R Помощь студентам 1 28.11.2008 12:35
Помогите найти ошибку в программе KnDmPetr Паскаль, Turbo Pascal, PascalABC.NET 5 10.03.2008 14:19