|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
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!!! И помогите сделать так что бы программа в ходе решения создавала фиктивный столбик! Ибо задача открытая! надо сделать закрытой! Если можно то надо что бы был не ввод с клавиатуры, а с текстового документа! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на поиск минимального элемента в массиве | 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 |