Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для c++\noob
-2 / 2 / 1
Регистрация: 13.11.2010
Сообщений: 52

Неправильный вывод в файл

25.12.2012, 13:17. Показов 401. Ответов 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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
#ifndef _MAXIMUM_FLOW
#define _MAXIMUM_FLOW
 
#include <fstream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <algorithm>
#include <windows.h>
 
using namespace std;
 
namespace Maximum_Flow{
  static const int MAXN=1000;       // максимум вершин
  static const int MAXM=2*MAXN*MAXN;    // максимум рёбер
  static const int INF=0x3FFFFFFF; //бесконечность
  static const double INFI=1e400;
 
  // Вершины в графе должны обозначаться от 1 до n
 
  double c[MAXM],f[MAXM],w[MAXM];//пропускная способность, величина потока, цена
  int ev[MAXM],be[MAXM],next[MAXM];
  double d[MAXN],value[MAXN];
  int nbs[MAXN],pnt[MAXN],open[MAXN],mk[MAXN],oldque[MAXN];
  int num;
 
  void Initialize(){
    memset(c,0,sizeof(c));
    memset(f,0,sizeof(f));
    memset(w,0,sizeof(w));
    memset(ev,0,sizeof(ev));
    memset(be,0,sizeof(be));
    memset(next,0,sizeof(next));
    num=0;
 
    memset(d,0,sizeof(d));
    memset(value,0,sizeof(value));
    memset(nbs,0,sizeof(nbs));
    memset(pnt,0,sizeof(pnt));
    memset(open,0,sizeof(open));
    memset(mk,0,sizeof(mk));
    memset(oldque,0,sizeof(oldque));
  }
 
  void AddEdge(int u,int v,int cc){
    next[++num]=nbs[u];
    nbs[u]=num;
    be[num]=num+1;
    ev[num]=v;
    c[num]=cc;
    f[num]=0;
 
    next[++num]=nbs[v];
    nbs[v]=num;
    be[num]=num-1;
    ev[num]=u;
    c[num]=0;
    f[num]=0;
  }
 
  void AddEdge(int u,int v,int cc,int ww){
    next[++num]=nbs[u];
    nbs[u]=num;
    be[num]=num+1;
    ev[num]=v;
    c[num]=cc;
    f[num]=0;
    w[num]=ww;
 
    next[++num]=nbs[v];
    nbs[v]=num;
    be[num]=num-1;
    ev[num]=u;
    c[num]=0;
    f[num]=0;
    w[num]=-ww;
  }
 
  double MaxFlow(int n,int s,int t){
    int cur,tail,i,j,u,v;
    double flow=0;
    do{
      memset(mk,0,sizeof(mk));
      memset(d,0,sizeof(d));
      open[0]=s;
      mk[s]=1;
      d[s]=INFI;
 
      for (pnt[s]=cur=tail=0;cur<=tail && !mk[t];cur++){ 
    for (u=open[cur],j=nbs[u];j;j=next[j]){
      v=ev[j];
      if (!mk[v] && f[j]<c[j]){
        mk[v]=1;
        open[++tail]=v;
        pnt[v]=j;
        if (d[u]<c[j]-f[j]) 
          d[v]=d[u];
        else d[v]=c[j]-f[j];
      }
    }
      }
      if (!mk[t])
    break;
    
      flow+=d[t];
      for (u=t;u!=s;u=ev[be[j]]){
    j=pnt[u];
    f[j]+=d[t];
    f[be[j]]=-f[j];
      }
 
    } while (d[t]>0);
    return flow;
  }
 
  double MaxFlow(int n,int s,int t,double &cost){
    int cur,tail,tl,i,j,u,v;
    double flow;
    memset(f,0,sizeof(f));
    flow=0;
    cost=0;
 
    do{
      memset(d,0,sizeof(d));
      for (i=1;i<=n;i++) value[i]=INFI;
      open[0]=s;
      d[s]=INF;
      value[s]=0;
      tail=0;
 
      while (tail>=0){
    memset(mk,0,sizeof(mk));
    memcpy(oldque,open,sizeof(open));
 
    for (tl=tail,pnt[s]=cur=0,tail=-1;cur<=tl;cur++){
      for (u=oldque[cur],j=nbs[u];j;j=next[j]){
        v=ev[j];
        if (f[j]<c[j] && value[u]<INFI && value[u]+w[j]<value[v]){
          if (!mk[v]) {
        mk[v]=1;
        open[++tail]=v;
          }
          pnt[v]=j;
          value[v]=value[u]+w[j];
          if (d[u]<c[j]-f[j])
        d[v]=d[u];
          else 
        d[v]=c[j]-f[j];
        }
      }
    }
      }
 
      if (value[t]==INFI) 
    return flow;
 
      flow+=d[t];
      cost+=d[t]*value[t];
      for (u=t;u!=s;u=ev[be[j]]){
    j=pnt[u];
    f[j]+=d[t];
    f[be[j]]=-f[j];
      }
 
    }while (d[t]>0);
    return flow;
  }
 
  /*void Debug_Print(){
  ofstream out;
  out.open("Output.txt");
            // Для теста
    out << "****************************** Это наш граф:" << endl;
    int i;
    for (i=1;i<=num;i+=2)
      out << "У ребра" << "(" << ev[i+1] << "," << ev[i] << ")" << "пропускная способность" << c[i] << "и величина потока" << f[i] << endl;
    out << "******************************" << endl;
    out.close();
  }*/
 
  void Debug_Print_Cost(){
  ofstream out;
  out.open("Output.txt");
                    // Для теста
    out << "****************************** Это наш граф:" << endl;
    int i;
    for (i=1;i<=num;i+=2)
      out << "У ребра" << "(" << ev[i+1] << "," << ev[i] << ")" << "пропускная способность" << c[i] << "стоимость" << w[i] << "и величина потока" << f[i] << endl;
    out << "******************************" << endl;
    out.close();
  }
 
  /*void Maximum_Flow_Test(){ // Для теста
    Initialize();
    
    ifstream in;
    in.open("Input.txt");
    int nNode;
    in >> nNode;
    int edge[nNode][nNode];
    in >> edge[nNode][nNode];
    in.close();
            {0,20,10,10,0,0,0,
            0,0,0,15,10,0,0,
            0,0,0,5,0,20,0,
            0,0,0,0,25,0,25,
            0,0,0,0,0,0,15,
            0,0,0,15,0,0,25,
            0,0,0,0,0,0,0};
    
    int i,j;
    for (i=1;i<=nNode;i++)
      for (j=1;j<=nNode;j++)
    if (edge[i-1][j-1])
      AddEdge(i,j,edge[i-1][j-1]);
    MaxFlow(nNode,1,nNode);
  }*/
 
  void Maximum_Flow_Cost_Test(){ // Для теста
    Initialize();
    
    ifstream in;
    ofstream out;
    in.open("Input.txt");
    int nNode;
    in >> nNode;
    int edge[nNode][nNode];
    in >> edge[nNode][nNode];
    in.close();
         /*={0,20,10,10,0,0,0,
            0,0,0,15,10,0,0,
            0,0,0,5,0,20,0,
            0,0,0,0,25,0,25,
            0,0,0,0,0,0,15,
            0,0,0,15,0,0,25,
            0,0,0,0,0,0,0};*/
    in.open("Input2.txt");
    int cost[nNode][nNode];
    in >> cost[nNode][nNode];
    in.close();
        /*={0,100,100,125,0,0,0,
            0,0,0,40,50,0,0,
            0,0,0,100,0,150,0,
            0,0,0,0,50,0,30,
            0,0,0,0,0,0,70,
            0,0,0,70,0,0,80,
            0,0,0,0,0,0,0};*/
    
 
    int i,j;
    double c;
    for (i=1;i<=nNode;i++)
      for (j=1;j<=nNode;j++)
    if (edge[i-1][j-1])
      AddEdge(i,j,edge[i-1][j-1],cost[i-1][j-1]);
    MaxFlow(nNode,1,nNode,c);
    out.open("Output.txt");
    out << "Общая стоимость: " << c << endl;
    out.close();
  }
 
};
 
int main(){
    
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  /*Maximum_Flow::Maximum_Flow_Test();
  Maximum_Flow::Debug_Print();*/
  Maximum_Flow::Maximum_Flow_Cost_Test();
  Maximum_Flow::Debug_Print_Cost();
  system("pause");
  return 0;
  
}
 
#endif
Ввожу:
Input
"Input.txt"

7
0 20 10 10 0 0 0
0 0 0 15 10 0 0
0 0 0 5 0 20 0
0 0 0 0 25 0 25
0 0 0 0 0 0 15
0 0 0 15 0 0 25
0 0 0 0 0 0 0

"Input2.txt"

0 100 100 125 0 0 0
0 0 0 40 50 0 0
0 0 0 100 0 1 0 0
0 0 0 0 50 0 30
0 0 0 0 0 0 70
0 0 0 70 0 0 80
0 0 0 0 0 0 0


Неправильно выводит пропускную способность, стоимость и величину потока, плюс нету общей стоимости:
Output
"Output.txt"
****************************** Это наш граф:
У ребра(1,2)пропускная способность2.29332e+006стоимость436и величина потока2.29332e+006
У ребра(1,3)пропускная способность-1стоимость2.29263e+006и величина потока0
У ребра(1,5)пропускная способность-1стоимость2.29252e+006и величина потока0
У ребра(1,6)пропускная способность2.29343e+006стоимость4.45255e +006и величина потока2.29343e+006
У ребра(1,7)пропускная способность2.2928e+006стоимость8и величина потока2.2928e+006
У ребра(2,1)пропускная способность2.29279e+006стоимость436и величина потока0
У ребра(2,3)пропускная способность116стоимость116и величина потока116
У ребра(2,4)пропускная способность2.29289e+006стоимость2.29252e +006и величина потока0
У ребра(2,5)пропускная способность4.3556e+006стоимость4.38912e+ 006и величина потока0
У ребра(2,6)пропускная способность2.29282e+006стоимость2.29336e +006и величина потока0
У ребра(2,7)пропускная способность2.29332e+006стоимость2.29332e +006и величина потока2.29332e+006
У ребра(3,1)пропускная способность-1стоимость2.29332e+006и величина потока0
У ребра(3,3)пропускная способность-1стоимость-1и величина потока0
У ребра(3,4)пропускная способность2.29343e+006стоимость2.29343e +006и величина потока0
У ребра(3,5)пропускная способность2.2928e+006стоимость2.29257e+ 006и величина потока0
У ребра(3,6)пропускная способность2.29279e+006стоимость2.29257e +006и величина потока0
У ребра(3,7)пропускная способность16384стоимость2.2927e+006и величина потока16384
У ребра(4,1)пропускная способность4.20467e+006стоимость4.20467e +006и величина потока0
У ребра(4,2)пропускная способность4.44087e+006стоимость4.44087e +006и величина потока0
У ребра(4,3)пропускная способность2.29283e+006стоимость2.29261e +006и величина потока0
У ребра(4,4)пропускная способность7.65179e+007стоимость4.38941e +006и величина потока0
У ребра(4,5)пропускная способность2.29331e+006стоимость2.29248e +006и величина потока0
У ребра(4,6)пропускная способность7стоимость2.29298e+006и величина потока0
У ребра(5,2)пропускная способность-1стоимость-1и величина потока0
У ребра(5,3)пропускная способность2.29332e+006стоимость2.29332e +006и величина потока0
У ребра(5,4)пропускная способность-1стоимость-1и величина потока0
У ребра(5,5)пропускная способность1.90704e+007стоимость4.20467e +006и величина потока0
У ребра(5,6)пропускная способность2.29298e+006стоимость4.44084e +006и величина потока0
У ребра(5,7)пропускная способность2стоимость2.29262e+006и величина потока2
У ребра(6,1)пропускная способность1стоимость4.38989e+006и величина потока0
У ребра(6,2)пропускная способность4.12883e+006стоимость2.29253e +006и величина потока116
У ребра(6,3)пропускная способность2.37338e+006стоимость4.20467e +006и величина потока16268
У ребра(6,5)пропускная способность4.20467e+006стоимость2.29331e +006и величина потока2
У ребра(6,6)пропускная способность4.44159e+006стоимость2.08876e +009и величина потока0
У ребра(6,7)пропускная способность2.29287e+006стоимость2.08881e +009и величина потока2.27704e+006
У ребра(7,1)пропускная способность4.35562e+006стоимость2.29266e +006и величина потока0
У ребра(7,2)пропускная способность2.29274e+006стоимость4.40111e +006и величина потока0
У ребра(7,3)пропускная способность2.29332e+006стоимость2.29332e +006и величина потока0
У ребра(7,4)пропускная способность4.45254e+006стоимость4.45255e +006и величина потока0
У ребра(7,5)пропускная способность8стоимость8и величина потока0
У ребра(7,6)пропускная способность16384стоимость16384и величина потока0
У ребра(7,7)пропускная способность2.08876e+009стоимость2.08876e +009и величина потока0
******************************
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2012, 13:17
Ответы с готовыми решениями:

Неправильный вывод в бинарный файл с урезанием текста
Ниже приведена программа которая урезает текст.Все бы хорошо но она при выводе в файл &quot;кушает&quot; символ новой строки.Например есть...

Неправильный вывод
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; class Kit{ public: float dovzhuna; float...

неправильный вывод
#include &quot;stdafx.h&quot; #include &quot;math.h&quot; #include &lt;iostream&gt; using namespace std; int comp_sum(double *mas, int count); int...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2012, 13:17
Помогаю со студенческими работами здесь

Неправильный вывод
При x = 0 или x = 1 должен выводиться текст &quot;Нет значений&quot;. При вводе шага(dx) если он имеет 2 знака после запятой, то все нормально....

Неправильный вывод
string str = &quot;&quot;; // input data of banner obj.setBannerName(str); bool Banner::setBannerName(string str) { ...

Неправильный вывод
Здравствуйте. Сильно мучает проблема вывода в коде. #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { ...

Неправильный вывод
Нужно перемножить отрицательные(нужно взять их в обратном порядке) и положительные члены массива, но почему-то происходит кривой вывод... ...

Неправильный вывод данных
Программа о авторе книги и его, собственно, книге. Надо подсчитать заработок за все переиздательства книги и общий налог. Формуы подставил,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru