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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 20:33   #1
ZidanCo
 
Аватар для ZidanCo
 
Регистрация: 20.10.2011
Сообщений: 3
По умолчанию Delphi. Жадный алгоритм. Коммивояжер

Ввожу число, определяющее количество строк и столбцов в матрицу.
При помощи random заношу числа в симметричную матрицу.
Далее приравниваю первое не нулевое значение в переменную min.
Задаю 2 цикла и ставлю условие: Если c[i,j](та самая матрица) не равно нулю и c[i,j] меньше min, тогда приравниваю новое значение в переменную min (min:=c[i,j]) и сразу в переменную F записываю значение из j, для дальнейшего перехода.

Дальше писать не стал, так как тут возникает проблема:
Решил проверить какие значения заносятся в F и обнаружил, что если новый минимум нашелся на втором месте, (то есть j должен равняться двум в этом случае), то в F заносится 0. Во всех остальных случаях все верно (минимум на 3м месте, тогда f = 3 и т.д.)
Вот код программы, но там много мусора, так как вырезал дальнейшую часть, ввиду ошибки.

Код:
procedure TForm1.Button1Click(Sender: TObject);

  var n,i,j,f,min:Integer;
  c:array [1..50,1..50] of Integer;
   begin
  n:=StrToInt(edt1.text);
  StringGrid1.RowCount := n+1;
  StringGrid1.ColCount := n+1;
  for i:=1 to n do
  for j:=1 to n do
        begin
       if i=j then
       c[i,j]:=0
       else
       begin
       c[i,j]:=(Random(20)+1);
       c[j,i]:=c[i,j];
       end;
       StringGrid1.Cells[j, i]:=IntToStr(c[i,j]);
       StringGrid1.Cells[i, j]:=IntToStr(c[i,j]);
       end;
       i:=1;
       j:=1;
   if c[i,j]=0 then
   begin
   j:=j+1;
   min:=c[i,j];
   end
   else
   begin
   min:=c[i,j];
   f:=j;
   end;
   for j:=1 to n do
          if (c[i,j]<>0) and (c[i,j]<min) then
            begin
            min:=c[i,j];
            StringGrid2.Cells[1, 2]:=IntToStr(j);
            f:=j;
         end;
   StringGrid2.Cells[1, 1]:=IntToStr(min);
   StringGrid2.Cells[1, 3]:=IntToStr(f);
end;

Последний раз редактировалось ZidanCo; 07.03.2012 в 17:23.
ZidanCo вне форума Ответить с цитированием
Старый 07.03.2012, 10:29   #2
ZidanCo
 
Аватар для ZidanCo
 
Регистрация: 20.10.2011
Сообщений: 3
По умолчанию

Новая проблема =)

Последний раз редактировалось ZidanCo; 07.03.2012 в 17:23.
ZidanCo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Жадный алгоритм merhaba1992 Помощь студентам 1 05.11.2011 00:24
Жадный алгоритм в программировании nikita92 Помощь студентам 0 26.11.2010 20:20
Жадный алгоритм. Задача о размене денег. Multiman Помощь студентам 4 18.10.2010 13:15
Delphi(1й курс) Жадный алгоритм Archetype Помощь студентам 8 17.05.2010 19:49
Жадный алгоритм и перебор mailjaffka Помощь студентам 10 17.05.2010 16:20