Уважаемые кодеры, не стоит замыкаться на одном программном продукте, ведь делфи не есть путь к решению всех прикладных задач программирования. Ведь кидать компоненту на форму и дурак сможет, а вот закодить алгоритм ето, как показывает практика, уже не всем под силу. Попробуйте решить следующую задачу с приминением императивного программирования (Delphi, C++, Perl, PHP, etc). Задача. Найти все способы обхода конверта, когда каждая из линий участвует в обходе ровно один раз. При обходе должны использоваться все линии. Добавлю, что при использовании логического программирования задача решаеться легко.
Задача очень популярна, и при большом желании я думаю решение можно найти в нете. А решается она алгоритмом BackTrack и этим все сказано. Просьба решить задачу не есть показатель грамотности в прорамировании. И убедиться в грамотности человека можно лишь пообщавшись с ним
Стоит ли спорить? Я считаю, что нужно направить свои силы в нужном направлении, ибо есть сила, но нет вектора. Идея насчет ZeroNews висела выше. Чтобы оценить человека, нужно увидеть его в действии.
при N=15 корость обработки 14сек. Кто быстрее ? Code: const NN = 15 ; type Arr2 = array[1..NN] of boolean; var N,K,Ri,pp:integer; A: array[1..NN] of integer; procedure f(R:integer;Mo: Arr2); // обробка рівнів label L1; var pp,Ri:integer; Mo0: Arr2; begin Mo0:=Mo; pp:=0; repeat inc(pp); if Mo[pp] then begin for Ri:=1 to R-1 do if(abs(pp-A[Ri])=R-Ri)then goto L1;end else goto L1; A[R]:=pp; Mo[pp]:=false; if R=N then inc(K) else f(R+1,Mo); Mo[pp]:=true; L1: until(pp=N) end; //--------------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var Mo: Arr2; R:integer; D: TDateTime; Time:string; begin K:=0; N:=strtoint(edit1.Text); for pp:=1 to N do Mo[pp]:=true; //онуляю масив для ограніченій з верхнього рівня (тільки вертикаль так як з діагоналями гімор...) D:= Now; // так як комбінації на дошці дзеркальні то... for pp:=1 to trunc(N/2) do begin Mo[pp]:=false;// Mo[pp-1]:=false; Mo[pp+1]:=false; A[1]:=pp; f(2,Mo); Mo[pp]:=true;// end; k:=k*2 ; if N/2 = trunc(N/2)+0.5 then begin Mo[pp]:=false;// A[1]:=trunc(N/2)+1; f(2,Mo); Mo[pp]:=true;// end; D:= D-Now; if N=1 then K:=1; // :) DateTimeToString(Time, 'ss/zzzzz', D); label1.Caption:=inttostr(k)+#13+Time ; end;