Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Парсинг адресной строки, хочу извлечь индекс и название города http://www.cyberforum.ru/cpp-beginners/thread745274.html
Всем доброго дня. Хочу распарсить такой вот файлик: ------------------------------------------------------------ 125414, Москва г, Петрозаводская ул, дом № 24а, корпус 2 125493, Москва г, Смольная ул, дом № 5 Москва г, Онежская ул, дом № 11.11.2008" ------------------------------------------------------------
C++ сбор данных о подключенных дисках нужно найти информацию о подключенных дисках (cdrom, ramdisc...) нахожу их с помощью этого кода: this->listBox1->Items->Clear(); this->comboBox1->Items->Clear(); int n; char dd; DWORD dr = GetLogicalDrives(); for( int i = 0; i < 26; i++ ) { http://www.cyberforum.ru/cpp-beginners/thread745268.html
происходит переполнение памяти ? C++
Пожалуйста помогите решить проблему: при компиляции ошибок нет, но при запуске выдает ошибку, я так понимаю происходит переполнение памяти, но как этого избежать?, пробовал delete (имя массива) - не помогает. Скрин с ошибкой ниже. Сам код: #include "stdafx.h" #include "iostream.h" #include "windows.h" #include "time.h"
Написать программу, которая копирует содержимое входного файла в выходной файл C++
треба: 1. Написати програму, яка копіює вміст вхідного файлу у вихідний; підраховує кількість розділових знаків у тексті; виводить усі слова що мають парну кількість літер; міняє місцями першу і останню літери місццями. 2.Структура з ім'ям DETAL, яка містить наступні поля: NAME –- назва деталі; SORT –- сорт вибору; DATE - дата виготовлення (масив з 3 чисел) вот!
C++ Вывод англ. слов(строка) http://www.cyberforum.ru/cpp-beginners/thread745255.html
Не могу найти ошибку, прошу помощи. Программа должна из строки английский и русских слов выдавать только русские. С рядом из англ. слов работает нормально, но если идёт сначала русское, а потом английское слово, то выдаётся английское слово и МММ. #include "stdafx.h" #include "conio.h" #include "iostream" using namespace std; int main() { setlocale(0,"");
C++ Конструктор с const char Сегодня взялся за изучение конструкторов , классов и методов защиты и сразу появилось несколько вопросов. class Book { private: char a; char b; public: Book (char a,const char g) { подробнее

Показать сообщение отдельно
c++\noob
 Аватар для c++\noob
-2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 52
25.12.2012, 13:17     Неправильный вывод в файл
Поиск максимального потока минимальной стоимости. Некорректность вывода информации в файл. Быть может что-то неправильно делаю, потому прошу вашей помощи.


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
******************************
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru