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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2012, 14:13   #1
Простой человек
Новичок
Джуниор
 
Регистрация: 08.04.2012
Сообщений: 1
Сообщение Траспортная задача. Метод минимального элемента.

Однородный груз сосредоточен у четырёх поставщиков объёмах 100 200 400 200 тонн. Данный груз необходимо доставить четырём потребителям в объёмах 100 200 200 300 тонн. Известны стоимости единицы груза от каждого поставщика каждому потребителю.
1 3 4 1
5 2 2 7
5 4 3 6
7 2 5 3
Требуется составить такой план перевозки, при котором запасы всех поставщиков будут вывезены полностью, запасы всех потребителе полностью удовлетворены и суммарные затраты на перевозку всех грузов минимальны.

Листинг программы:

#include <iostream>
using namespace std;
int* input (int **B, const int str, const int stl) // ввод данных строки и столбца
(* указатель который хранит адрес)
{
int min, max=B[0][0], id_a_min = 0, id_b_min = 0;
for (int a=0; a<str; a++)
{
for (int b=0; b<stl; b++)
{
if (B[a][b]>max)
{
max = B[a][b]; //нахождение максимума
}
}
}
min = max;
for (int a=0; a<str; a++)
{
for (int b=0; b<stl; b++)
{
if (B[a][b]<=min && B[a][b]>=0)
{
min = B[a][b];
id_a_min = a;
id_b_min = b;
}
}
}
B[id_a_min][id_b_min] = -1;
int *p = new int [3];
*p = min;
*(p+1) = id_a_min; // Индекс строки
*(p+2) = id_b_min; // Индекс столбца
return (p);
}
void main()
{
setlocale(0, "Rus");
const int str=4, stl = 4; // запись неизменяемых переменных
int NEW_mas[str][stl], // Итоговый массив
P[stl]={100, 200, 400, 200}, Z[str]={100, 200, 200, 300};
int **B = new int *[str]; // массив с начальными данными
for (int i=0; i<str; i++)
B[i] = new int [stl];
for (int a=0; a<str; a++)
{
for (int b=0; b<stl; b++)
{
NEW_mas[a][b] = 0;
}
}
for (int a=0; a<str; a++)
{
for (int b=0; b<stl; b++)
{
cout << "Матрица затрат столбец=[" << a+1 << "] строка=[" << b+1 << "]: "; // ввод данных с клавиатуры
cin >> B[a][b];
}
}
cout << endl;
cout << "Матрица исходных данных" << endl;
for (int a=0; a<str; a++)
{
for (int b=0; b<stl; b++)
{
cout << B[a][b] << '\t'; // вывод на экран данных
}
cout << endl;
}
cout << endl;
while (1) // позволяет выполнять цикл пока условие истинно
{
// *p - min, *(p+1) - индекс cтроки, *(p+2) - индекс столбца
int *p = input(B, str, stl);
int min,
ind_str=*(p+1), ind_stl=*(p+2);
if (Z[ind_str] <= P[ind_stl])
min = Z[ind_str];
else
min = P[ind_stl];
if (Z[*(p+1)]!=0 || P[*(p+2)]!=0)
{
NEW_mas[(*(p+1))][(*(p+2))] = min;
Z[*(p+1)] = Z[*(p+1)] - min,
P[*(p+2)] = P[*(p+2)] - min;
}
int S=0, S1=0;
for (int a=0; a<str; a++ )
{
S = S + Z[a];
}
for (int a=0; a<stl; a++ )
{
S1 = S1 + P[a];
}
if (S == 0 || S1 == 0)
{
break; // выход из программы
}
}
cout << "Опорный план: " << endl;
for (int a=0; a<str; a++)
{
for (int b=0; b<stl; b++)
{
cout << NEW_mas[a][b] << '\t'; // вывод на экран решения
}
cout << endl;
}
for (int i=0; i<str; i++) delete [] B[i];
delete [] B;
B=NULL;
system("pause");
}

Программа работает но выводит неверный ответ нужно что бы выводила опорный план при том что удовлетворённых было 8 из 8! А она выводит 5 из 8!!!
И помогите сделать так что бы программа в ходе решения создавала фиктивный столбик! Ибо задача открытая! надо сделать закрытой!
Если можно то надо что бы был не ввод с клавиатуры, а с текстового документа!
Простой человек вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на поиск минимального элемента в массиве 2517 Помощь студентам 12 30.06.2011 15:19
Нахождение минимального элемента в строке(StringGrid) Бурундук Помощь студентам 1 16.05.2011 18:03
Поиск минимального элемента в stringgrid igabenu Общие вопросы Delphi 3 27.02.2011 19:03
Ошибка в нахождении минимального элемента СветланаRerum Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 04.06.2010 13:39
Поиск минимального элемента в матрице F1eCSo Помощь студентам 0 04.02.2010 17:20