// Функция для нахождения начального решения методом северо-западного угла void northWestCornerMethod(const vector<int>& supply, const vector<int>& demand, const vector<vector<int>>& cost) { int m = supply.size(); // количество складов int n = demand.size(); // количество потребителей vector<vector<int>> shipment(m, vector<int>(n, 0)); // матрица поставок
int i = 0, j = 0; // индексы для складов и потребителей
// Выполняем метод северо-западного угла while (i < m && j < n) { // Определяем, сколько можно отправить int amount = min(supply[i], demand[j]); shipment[i][j] = amount; // заполняем матрицу поставок supply[i] -= amount; // уменьшаем запас на складе demand[j] -= amount; // уменьшаем спрос потребителя
// Переход к следующему складу или потребителю if (supply[i] == 0) { i++; // движемся к следующему складу } if (demand[j] == 0) { j++; // движемся к следующему потребителю } }
// Вывод результата cout << "Решение методом северо-западного угла:\n"; cout << "Матрица поставок:\n"; for (int k = 0; k < m; ++k) { for (int l = 0; l < n; ++l) { cout << shipment[k][l] << "\t"; } cout << endl; }
// Вывод стоимости перевозок int totalCost = 0; for (int k = 0; k < m; ++k) { for (int l = 0; l < n; ++l) { totalCost += shipment[k][l] * cost[k][l]; // суммируем общую стоимость } }
int main() { // Пример: количество товаров на складах vector<int> supply = {30, 70}; // Закупки со склады А и В // Пример: потребности клиентов vector<int> demand = {50, 50, 0}; // Потребности клиента C, D, E
// Задаем стоимости перевозок для каждого маршрута vector<vector<int>> cost = { {4, 6, 0}, // Стоимость от склада A к клиентам C, D, E {3, 2, 0} // Стоимость от склада B к клиентам C, D, E };
// Вызываем метод northWestCornerMethod(supply, demand, cost);
return 0; }
Дополнен 2 дня назад
Проблема в строках supply[i] -= amount; // уменьшаем запас на складе demand[j] -= amount; // уменьшаем спрос потребителя
#include <vector>
using namespace std;
// Функция для нахождения начального решения методом северо-западного угла
void northWestCornerMethod(const vector<int>& supply, const vector<int>& demand, const vector<vector<int>>& cost) {
int m = supply.size(); // количество складов
int n = demand.size(); // количество потребителей
vector<vector<int>> shipment(m, vector<int>(n, 0)); // матрица поставок
int i = 0, j = 0; // индексы для складов и потребителей
// Выполняем метод северо-западного угла
while (i < m && j < n) {
// Определяем, сколько можно отправить
int amount = min(supply[i], demand[j]);
shipment[i][j] = amount; // заполняем матрицу поставок
supply[i] -= amount; // уменьшаем запас на складе
demand[j] -= amount; // уменьшаем спрос потребителя
// Переход к следующему складу или потребителю
if (supply[i] == 0) {
i++; // движемся к следующему складу
}
if (demand[j] == 0) {
j++; // движемся к следующему потребителю
}
}
// Вывод результата
cout << "Решение методом северо-западного угла:\n";
cout << "Матрица поставок:\n";
for (int k = 0; k < m; ++k) {
for (int l = 0; l < n; ++l) {
cout << shipment[k][l] << "\t";
}
cout << endl;
}
// Вывод стоимости перевозок
int totalCost = 0;
for (int k = 0; k < m; ++k) {
for (int l = 0; l < n; ++l) {
totalCost += shipment[k][l] * cost[k][l]; // суммируем общую стоимость
}
}
cout << "Общая стоимость перевозок: " << totalCost << endl;
}
int main() {
// Пример: количество товаров на складах
vector<int> supply = {30, 70}; // Закупки со склады А и В
// Пример: потребности клиентов
vector<int> demand = {50, 50, 0}; // Потребности клиента C, D, E
// Задаем стоимости перевозок для каждого маршрута
vector<vector<int>> cost = {
{4, 6, 0}, // Стоимость от склада A к клиентам C, D, E
{3, 2, 0} // Стоимость от склада B к клиентам C, D, E
};
// Вызываем метод
northWestCornerMethod(supply, demand, cost);
return 0;
}