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:
| function TEulerQU.Passt(X,Y,N:Integer):Boolean; var K:Integer; begin Passt:=True; for K:=1 to X-1 do begin if Feld[K,Y].L=Karte[N].L then begin Passt:=False;exit end; if Feld[K,Y].G=Karte[N].G then begin Passt:=False;exit end; end; for K:=1 to Y-1 do begin if Feld[X,K].L=Karte[N].L then begin Passt:=False;exit end; if Feld[X,K].G=Karte[N].G then begin Passt:=False;exit end; end; end;
procedure TEulerQU.Setz(Tiefe,X,Y:Integer); var K,XNeu,YNeu:Integer; begin for K:=1 to KN do begin inc(Count); if not Karte[K].Benutzt then if Passt(X,Y,K) then begin Feld[X,Y].L:=Karte[K].L;Feld[X,Y].G:=Karte[K].G; Karte[K].Benutzt:=True;XNeu:=X;YNeu:=Y; inc(XNeu); Application.ProcessMessages; if GetAsyncKeyState(VK_Escape)<0 then begin Abbruch:=True; exit; end; if XNeu>N then begin XNeu:=1;inc(YNeu) end; if Tiefe<KN then Setz(Tiefe+1,XNeu,YNeu) else begin inc(GesamtAnzahl);Anzeigen end; if Abbruch then exit; Feld[X,Y].L:=0;Feld[X,Y].G:=0;Karte[K].Benutzt:=False end end end; KN:=N*N;GesamtAnzahl:=0; for Y:=1 to N do for X:=1 to N do begin Karte[(Y-1)*N+X].L:=Y; Karte[(Y-1)*N+X].G:=X; Karte[(Y-1)*N+X].Benutzt:=False; Feld[X,Y].L:=0;Feld[X,Y].G:=0; end; Abbruch:=False;Count:=0; Screen.Cursor:=crHourGlass; TSek:=TimeSekunden; Setz(1,1,1); TSek:=TimeSekunden-TSek; Screen.Cursor:=crDefault; |