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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2012, 17:44   #1
quade1992
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 13
Восклицание задача secret pipes

Помогите разобраться с кодом, должен считывать файл а потом в другой файл записать, а он не записывает

Вот сам код, а после него описание задания
Код:
program z13;
Const 
MaxN = 2000; 
MaxP = 20000; 
Free = 0; 
Used = 1; 
var 
  N:1..MaxN;
  input,output:TEXT;
  P:1..MaxP;
  i,j:integer;
  Pred,Rank:array[1..MaxN] of integer;
  B,E:array[1..MaxP] of integer;
  NotMasked:array[1..MaxP] of integer;
  Key:array[1..MaxN-1] of integer;
  Answer,MinAnswer,CurAnswer,maxlongint:longint;
  u,v:integer;
  R:array[1..MaxP] of integer;
  
  
procedure InputData;
var i:integer;
    begin
      assign(input,'input.txt');reset(input);
      readln(N,P);
      for i:=1 to P do readln(B[i],E[i],R[i]);
      close(input);
    end;
    
    
function Part(p,rr:longint):longint;
  var
  
  i,j,ReККz:longint;
  x,y:integer;
    begin
      x:=R[p];
      i:=p-1;
      j:=rr+1;
      while i<j do
        begin
          repeat j:=j-1 until R[j]<=x;
          repeat i:=i+1 until R[i]>=x;
          if i<j then
          begin
            y:=R[i];R[i]:=R[j];R[j]:=y;
            z:=B[i];B[i]:=B[j];B[j]:=z;
            z:=E[i];E[i]:=E[j];E[j]:=z;
          end;
        end;
        Part:=j;
     end;
     
procedure QuicksortR(p,rr:longint);
  var q:longint;
      begin
        if p<rr then 
          begin
            q:=Part(p,rr);
            QuicksortR(p,q);
            QuicksortR(q+1,rr)
            end;
      end;      

procedure MakeSet(x:longint); 
  begin 
    Pred[x]:=x; 
    rank[x]:=0; 
  end;
  
function FindSet(x:longint):longint; 
  begin 
    if x<>pred[x] then Pred[x]:=FindSet(pred[x]); 
    FindSet:=Pred[x]; 
  end;
  
  

Procedure Link(x,y:longint); 
  begin 
    if rank[x]>rank[y] then pred[y]:=x 
    else 
      begin 
        pred[x]:=y; 
        if rank[x]>rank[y] then inc(rank[y]);
      end; 
  end; 

Procedure Union(x,y:longint); 
  begin 
    Link (FindSet(x),FindSet(y)); 
  end; 

procedure MinTree_Kruskal_l; 
var i:integer;
  begin 
    Answer:=0; j:=0; 
    for i:=1 to N do Makeset(i); 
    i:=1;
    While J<>N-1 do 
      begin 
        if (Findset(B[i])<>FindSet(E[i])) then 
          begin 
            Answer:=Answer+R[i]; 
            inc(j); Key[j]:=-i; 
            Union(B[i],E[i]); 
          end; 
        inc(i); 
      end; 
  end; 

procedure MinTree_Kruskal_2;
  var k : longint;
  FindSetConst:array [1..MaxN] of integer; 
    begin 
      While (J<>N-1) do 
        begin 
          if (NotMasked[i]=1) then 
          if (Findset(B[i])<>FindSet(E[i])) then 
            begin 
              Answer:=Answer+R[i]; 
              inc(j); 
            end; 
          inc(i); 
        end; 
 end;

begin 
  InputData; 
  QuickSortR(1,P); 
  MinTree_Kruskal_l; 
  for i:=1 to P do NotMasked[i]:=1; 
  CurAnswer:=maxlongint; 
  MinAnswer:=Answer;
for v:=1 to N-1 do 
  begin 
    NotMasked[key[v]]:=0; 
    Answer:=MinAnswer-R[key[v]];
    for i:=1 to N do Makeset(i);
    for u:=1 to N-1 do 
    if NotMasked[key[u]]=1 then 
      begin 
        Union(B[key[u]],E[key[u]]); 
        NotMasked[key[u]]:=0; 
      end; 
      i:=key[v]+1; j:=N-2; 
      MinTree_Kruskal_2; 
      if Answer<CurAnswer then CurAnswer:=Answer; 
      for u:=1 to N-1 do NotMasked[key[u]]:=1; 
     end; 
assign (output,'output.txt'); rewrite(output);
writeln(CurAnswer); 
close(output); 
end.



Pipes
Фермер Джон хочет как можно дешевле организовать свою систему распределения воды, но он не хочет, чтобы его конкурент фермер Плуто мог предсказать маршруты, которые он выбирает. ФД знает, что такая задача обычно требует самого дешевого способа прокладки труб поэтому он решил использовать второй по стоимости способ.
Дан список всех двунаправленных труб, которые могут соединять множество из W(3 <= W<= 2 ООО) станций с водой (каждая из которых может быть встроена в колодец). Ваша задача — найти второй из самых дешевых способов соединить насосные станции, используя не более чем Р(Р <= 20 ООО) труб с заданной стоимостью каждой трубы. Не должно быть трубы, соединяющей станцию саму с собой. Не должно быть двух труб, соединяющих дважды одну и ту же пару станций.
Гарантируется, что есть только один самый дешевый способ распределить воду, и что существует, как минимум, два способа распределить воду. Все стоимости — положительные числа, помещающиеся в 16-битное целое. Водная станция идентифицируется своим номером — целым числом в диапазоне 1..W.
Ввод:
строка 1- два разделенных пробелом целых числа, W и Р;
строки 2..Р + 1 — каждая строка описывает одну трубу и содержит 3 числа, разделенных пробелом, — номера станций начала и конца трубы, а также стоимость этой трубы. Пример ввода:
57
123
234
147
24 11
259
545
358
Вывод:
Одна строка, содержащая целое число — вторая минимальная стоимость конструирования системы распределения воды.
Пример вывода:
20

Последний раз редактировалось Stilet; 26.05.2012 в 08:24.
quade1992 вне форума Ответить с цитированием
Старый 25.05.2012, 22:25   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Что-то не совсем ясно, что за язык ...
Код:
procedure InputData;
var i:integer;
begin
assign(input,'input.txt');reset(input);
readln(input,N,P);
for i:=1 to P do readln(input, B[i],E[i],R[i]);
close(input);
end;
Вроде как так должно быть.
А ежели так, то и следующий код должен иметь вид:
Код:
assign (output,'output.txt'); rewrite(output);
writeln(output, CurAnswer);
close(output);
Как-то так получается ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по pipes (c++) в Linux Lomik_XP Общие вопросы C/C++ 0 08.10.2011 19:28
Named pipes, парсинг строки Alex217Vish Visual C++ 0 04.11.2010 22:29
named pipes st01en Общие вопросы Delphi 1 26.09.2010 23:33