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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2011, 09:30   #1
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию Не понять где ошибка

Скажите кто нить где ошибка целый день мучаюсь не получается
Код:
USES crt;

const
  MAX_SIZE = 8;
  MIN_VALUE = -3600; { -5e4; }
  ds : array [1..Max_Size, 1..Max_Size] of integer = ((0,19,0,0,0,0,0,0),
                                                  (19,0,12,13,0,0,0,0),
                                                  (0,12,0,0,0,11,0,7),
                                                  (0,13,0,0,0,0,0,0),
                                                  (0,0,0,0,0,0,0,10),
                                                  (0,0,11,0,0,0,0,0),
                                                  (0,0,0,0,0,0,0,8),
                                                  (0,0,17,0,10,0,8,0));
type
  edge = record
    num, weight: integer;
  end;

  vertex = record
    left, right: edge;
  end;

var
  n, i,jk, totalEdges: integer;
  adjMatrix: array [1 .. MAX_SIZE, 1 .. MAX_SIZE] of integer;
  { матрица смежности }
  adj: array [1 .. MAX_SIZE ] of vertex; { двоичное дерево }
  edgesAmount: array [1 .. MAX_SIZE ] of integer;
  mem: array [1 .. MAX_SIZE , 1 .. MAX_SIZE ] of integer;

procedure dfs(num: integer);
var
  isLeft: boolean;
  i: integer;
begin
  isLeft := true;
  for i := 1 to n  do
  begin
    if (adjMatrix[num][i] <> 0) then
    begin
      if (isLeft) then
      begin
        adj[num].left.num := i;
        adj[num].left.weight := adjMatrix[num, i];
      end
      else
      begin
        adj[num].right.num := i;
        adj[num].right.weight := adjMatrix[num, i];
      end;
      isLeft := false;
      adjMatrix[num][i] := 0;
      adjMatrix[i][num] := 0;

      dfs(i);

      edgesAmount[num] := edgesAmount[num] + edgesAmount[i] + 1;
    end;
  end; { FOR }
end; { Procedure }

procedure input;
var
  f, s, w: integer;
begin
  read(n);
  read(totalEdges);
  {for i := 1 to n do
  begin
    read(f);
    read(s);
    read(w);
    adjMatrix[f, s] := w;
    adjMatrix[s, f] := w;}
  For i:=1 to n do
   For jk:=1 to n do
    adjMatrix[i,jk]:=ds[i,jk];

  dfs(1);
end;

function max(a, b: integer): integer;
begin
  if (a > b) then
    max := a
  else
    max := b;
end;

function f(num, edges: integer): integer;
var
  left, right: edge;
  res, rightEdges, leftEdges, leftValue, rightValue, cur: integer;
begin
  left := adj[num].left;
  right := adj[num].right;

  if (mem[num, edges] <> 0) then
    f := mem[num, edges]
  else if (edges = 0) then
    f := 0
  else if (edges > edgesAmount[num]) then
    f := MIN_VALUE
  else if (edges = 1) then
    f := max(left.weight, right.weight);
  res := 0;
  for i := 0 to edges do
  begin
    leftEdges := i;
    rightEdges := edges - i;

    leftValue := 0;
    rightValue := 0;
    if (leftEdges <> 0) then
      leftValue := left.weight + f(left.num, leftEdges - 1);
    if (rightEdges <> 0) then
      rightValue := right.weight + f(right.num, rightEdges - 1);
    cur := leftValue + rightValue;
    res := max(res, cur);
  end;
  mem[num][edges] := res;
  f := res;
end;

procedure solve;
var
  res: integer;
begin
  res := f(1, totalEdges);
  write(res, ' ');
end;

BEGIN
  input;
  solve;

END.
Входные данные 8 и 3
xakkkkker вне форума Ответить с цитированием
Старый 16.05.2011, 09:42   #2
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

рекурсия зацикливается
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять где ошибка Neon-z PHP 13 22.01.2011 16:15
Не могу понять где ошибка Азиза Общие вопросы C/C++ 1 11.01.2011 14:03
Не могу понять, где ошибка( IROKEZ Общие вопросы C/C++ 4 16.12.2010 21:00
Помогите понять где ошибка !!! beliy13 Помощь студентам 2 12.12.2009 20:22
Не могу понять где ошибка в коде SeRhy Общие вопросы C/C++ 5 20.09.2009 13:10