Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Потоки в C++ Господа, можете посоветовать хорошую книгу по потокам в C++ или мануалы какие-то что ли ? Не советуйте материал найденный в поисковике, посоветуйте то чем пользовались или проверяли. Не предлагайте... https://www.cyberforum.ru/ cpp-beginners/ thread1461690.html C++ Составить алгоритм и программу, которые формируют список фамилий рабочих
Помогите, будьте так добры. Известны фамилии и месячные заработки 10 рабочих бригады в течение года. Составить алгоритм и программу, которые формируют список фамилий рабочих, имевших хотя бы раз...
C++ Получить двоичную матрицу с единицами на главных диагоналях Получить матрицу: 1 0 ... 0 1 0 1 ... 1 0 . . ... . . 0 1 ... 1 0 1 0 ... 0 1 https://www.cyberforum.ru/ cpp-beginners/ thread1461680.html C++ Дописать код - уничтожить N элементов, начиная с номера K в динамическом массиве https://www.cyberforum.ru/ cpp-beginners/ thread1461677.html
Мне нужно использовать именно динамические массивы. У меня создается массив, удаляется, но как в коде написать алгоритм удаления N чисел, начиная с номера К? Помогите #include "stdafx.h"...
C++ Библиотека для обработки звукового сигнала
Добрый вечер, уважаемые форумчане. Меня интересует написание программы Осциллографа на базе звуковой карты. Для себя я вывел основные этапы работы. И в самом начале у меня возникла загвоздка....
C++ Перевод из int в LPTSTR https://www.cyberforum.ru/ cpp-beginners/ thread1461657.html
вот функция WriteSlot BOOL WriteSlot(HANDLE hSlot, LPTSTR lpszMessage) { BOOL fResult; DWORD cbWritten; fResult = WriteFile(hSlot, lpszMessage, ...
C++ Как вывести отдельную строку? // PR7.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <locale.h> #include <stdlib.h> #include <stdio.h> #include <iostream> #include <cstdlib>... https://www.cyberforum.ru/ cpp-beginners/ thread1461626.html C++ Простой сервер С++ для обработки HTTP запросов
Здравствуйте, недавно начал изучать с++.Стала задача поставить сервер под linox. Может кто-то скинуть нормальную статью, или пример сервера с некоторым описанием.
C++ Написать программу, в которой задана произвольная функция вызывается из функции main () https://www.cyberforum.ru/ cpp-beginners/ thread1461591.html
5. Написать программу, в которой задана произвольная функция вызывается из функции main ().
C++ Написать программу, которая выводит на экран среднее арифметическое введенных положительных чисел 4. Написать программу, которая выводит на экран среднее арифметическое введенных положительных чисел, количество которых произвольная. https://www.cyberforum.ru/ cpp-beginners/ thread1461590.html
Написать программу, которая преобразует введен в минутах интервал времени в интервал в часах и минутах C++
3. Написать программу, которая преобразует введен в минутах интервал времени в интервал в часах и минутах.
C++ Написать программу, которая выводит на экран четверостишие (произвольный), все строки которого разного цвета 2. Написать программу, которая выводит на экран четверостишие (произвольный), все строки которого разного цвета. https://www.cyberforum.ru/ cpp-beginners/ thread1461588.html
0 / 0 / 1
Регистрация: 03.10.2014
Сообщений: 13
0

Транспортная задача (методом потенциалов) - C++ - Ответ 7685587

28.05.2015, 21:40. Показов 5620. Ответов 1
Метки (Все метки)

Студворк — интернет-сервис помощи студентам
В универе задали сделать транспортную задачу. Знания только одного семестра ОП. Сделал заполнение таблицы поиск потенциала и проверку пустых клеточек.

условие было матрица 4х4
коэффициенты матрицы
1 3 3 4
5 2 7 5
6 4 8 2
7 1 5 7

a= 50 20 30 20
b= 40 30 35 15

Матрица заполняется методом двойного предпочтения
40 0 30 0
0 10 10 0
0 0 15 15
0 20 0 0

потом находятся потенциалы v={1,-2,3,-3} u={0,4,5,3}
проверяется условие для пустых клеток U[i]+V[j]<=C[i][j]
в клеточке {3,2} условие не выполняется ( 3+3 <= 5)

в этой точке надо условно поставить + а в остальных вершинах многоугольника чередующиеся знаки «-», «+», «-».

Должно получится
{3,2 +} {3,1 -} {1,1 +} {1,2 -}
Из MATRij стоящих в минусовых клетках, выбираем наименьшее, т.е. min (1, 2) = 10 и матрица будет выглядеть так
40 0 30 0
0 20 0 0
0 0 15 15
0 10 10 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
 
int main(int argc, char *argv[])
{
    setlocale( LC_ALL,"Russian" );
    int n,m,F=0,min2=0;
    int min,i,j,sum_a=0,sum_b=0,ind_i=0,ind_j=0;
    cout<<"Количество строк: ";
    cin>>n;
    cout<<"Количество столбцов: ";
    cin>>m;
    int u[n],v[m];
    int matr[m][n];
    int matr_ind[m][n];
    int matr_pm[m][n];
    int matr_koef[m][n];
    int a[n];
    int b[m];
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
    matr_ind[i][j]=0;
    matr_pm[i][j]=0;
}
}
    for(i=0;i<n;i++)
    {
    u[i]=100;
}
    for(j=0;j<m;j++)
    {
    v[j]=100;
}
    cout<<"Коэф матрицы"<<"\n";
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    cin>>matr_koef[i][j];
}
    cout<<"введите a:"<<"\n";
    for(i=0;i<m;i++)
    cin>>a[i];
    cout<<"введите  b:"<<"\n";
    for(i=0;i<n;i++)
    cin>>b[i];
    for(i=0;i<m;i++)
    sum_a+=a[i];
    for(i=0;i<n;i++)
    sum_b+=b[i];
    if(sum_a==sum_b)
    {
     cout<<"матрица сходится";
     cout<<"\n";
     }              
    if(sum_a>sum_b)
    {
     cout<<"матрица не сходится";
     system("PAUSE");
     return EXIT_SUCCESS;
     }
    if(sum_a<sum_b)
    {
     cout<<"матрица не сходится";
     system("PAUSE");
     return EXIT_SUCCESS;
     }
    cout<<"\n";
    
    for(i=0;i<n;i++)
    {
    min = 500;
    for(j=0;j<m;j++)
    {
    if(matr_koef[i][j]<min)
    {
    min=matr_koef[i][j];
    ind_i=i;
    ind_j=j;
    }
    }
    matr_ind[ind_i][ind_j]++;
    }
 
    for(j=0;j<m;j++)
    {
    min=500;
    for(i=0;i<n;i++)
    {
    if(matr_koef[i][j]<min)
    {
    min=matr_koef[i][j];
    ind_i=i;
    ind_j=j;
    }
    }
    matr_ind[ind_i][ind_j]++;
    }
    
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
        if(matr_ind[i][j]==2)
        if(a[i]>=b[j])
        {
        matr[i][j]=a[i]-(a[i]-b[j]);
        a[i]=a[i]-b[j];
        b[j]=0;
        }
        else
        {
        matr[i][j]=b[j]-(b[j]-a[i]);
        b[j]=b[j]-a[i];
        a[i]=0;
        }
    }
    }
    
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
        if(matr_ind[i][j]==1)
        if(a[i]>=b[j])
        {
        matr[i][j]=a[i]-(a[i]-b[j]);
        a[i]=a[i]-b[j];
        b[j]=0;
        }
        else
        {
        matr[i][j]=b[j]-(b[j]-a[i]);
        b[j]=b[j]-a[i];
        a[i]=0;
        }
    }
    }
    
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
        if(matr_ind[i][j]==0)
        if(a[i]>=b[j])
        {
        matr[i][j]=a[i]-(a[i]-b[j]);
        a[i]=a[i]-b[j];
        b[j]=0;
        }
        else
        {
        matr[i][j]=b[j]-(b[j]-a[i]);
        b[j]=b[j]-a[i];
        a[i]=0;
        }
    }
    }
    
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
    cout<<matr[i][j]<<" ";
    }
    cout<<"\n";
    }
    
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
    F+=matr[i][j]*matr_koef[i][j];
    }
    }
    cout<<"F(x)="<<F<<"\n";
    
    u[0]=0;
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
                    if((matr[i][j]!=0)&&(v[j]==100)&(u[i]!=100))
                    {
                                     v[j]=matr_koef[i][j]-u[i];
                                     }
                    if((matr[i][j]!=0)&&(v[j]!=100)&(u[i]==100))
                    {
                                     u[i]=matr_koef[i][j]-v[j];
                                     }
                                     }
                                     }                                                              
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
                    if((u[i]==100)&&(v[j]!=100)&&(matr[i][j]!=0))
                    u[i]=matr_koef[i][j]-v[j];
                    if((u[i]!=100)&&(v[j]==100)&&(matr[i][j]!=0))
                    v[j]=matr_koef[i][j]-u[i];
                    }
                    }
    cout<<"Потенциал V:";
    for(i=0;i<n;i++)
    {
    cout<<v[i]<<" ";
}
    cout<<"\n"<<"Потенциал U:";
    for(j=0;j<m;j++)
    {
    cout<<u[j]<<" ";
}
    cout<<"\n";
    
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
                    if((matr[i][j]==0)&&(u[i]+v[j]-matr_koef[i][j]>0.1))
                    {
                    cout<<"Опорный план является не оптимальным в строке "<<i<<" и в столбце "<<j<<"\n";
                    matr_pm[i][j]++;
                    }
                    }
                    }             
    system("PAUSE");
    return EXIT_SUCCESS;
}


Вернуться к обсуждению:
Транспортная задача (методом потенциалов) C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2015, 21:40
Готовые ответы и решения:

Транспортная задача (методом потенциалов)
Доброго времени суток форумчане! Нужна прога по вычислению транспортной задачи методом потенциалов....

Транспортная задача методом северо западного угла
Имеются три пункта отправления А1, А2, А3 однородного груза и пять пунктов В1, В2, В3, В4, В5 его...

Транспортная задача, построить оптимальный план методом минимальных элементов
Дана задача построить оптимальный план методом минимальных элементов. код проходит 1 цикл правильно...

Решить транспортную задачу методом потенциалов
Помогите пожалуйста. Необходимо написать программу которая решает транспортную задачу методом...

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2015, 21:40
Помогаю со студенческими работами здесь

Транспортная задача
Всем привет) Пишу решение транспортной задачи по методу минимального элемента. Сейчас нахожусь на...

Транспортная задача
Всем добрый день! Второй месяц не могу справиться, помогите пожалуйста. Очень нужна программа к...

Транспортная задача
Здравствуйте! Помогите пожалуйста составить задачу методом минимального элемента и методом...

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru