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: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; const nmax=15; type Tfeld = array[1..nmax,1..nmax]of integer; Tfeld2 = array[1..nmax,1..nmax,1..nmax+1]of integer; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Image1: TImage; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private function dame(zeile:integer) : boolean; procedure ausgabe; public end;
var Form1: TForm1; feld : Tfeld; backup: Tfeld2; n: integer;
implementation
{$R *.dfm}
function Tform1.dame(zeile:integer) : boolean; var i,a,b,z,x, y:integer; label lap1; begin lap1: for i:=1 to n do begin for y:=1 to n do begin backup[i,y,zeile]:=feld[i,y]; end; end; if zeile=n+1 then dame:=true else begin x:=1; for i:=1 to n do begin if feld[zeile,i]=0 then begin for y:=zeile to n do begin feld[y,i]:=2; end; for y:=1 to n do begin a:=zeile+y; b:=i+y; if (a<=n) and (b<=n) then feld[a,b]:=2; end; for y:=1 to n do begin a:=zeile+y; b:=i-y; if (a<=n) and (b>=1) then feld[a,b]:=2; end; feld[zeile,i]:=1; z:=i; inc(x); break; end; end; if x=1 then dame:=false else if Dame(zeile+1)=true then Dame:=true else begin for i:=1 to n do begin for y:=1 to n do begin feld[i,y]:=backup[i,y,zeile]; end; end; feld[zeile,z]:=2; goto lap1; end; end; end;
procedure Tform1.ausgabe; var i,a,b,q,y: integer; begin q:=20; for i:=1 to n do begin for y:=1 to n do begin if feld[i,y]=1 then for a:=1 to q-1 do begin with image1.canvas do begin moveto(i*q-q+1,y*q-q+a); lineto(i*q,y*q-q+a); end; end; end; end; end;
procedure TForm1.Button1Click(Sender: TObject); var q,p: integer; begin p:=20; n:=strtoint(edit1.text); image1.Width:= p*n ; image1.height:= p*n ; with image1.canvas do begin for q:=0 to n do begin moveto(q*p,0); lineto(q*p,p*n); end; for q:=0 to n do begin moveto(0,q*p); lineto(n*p,q*p); end; end; end;
procedure TForm1.Button2Click(Sender: TObject); var i,y,a,x,b : integer; jo: boolean; begin x:=0; for i:=1 to n do begin for y:=1 to n do begin feld[i,y]:=0; end; end; if dame(1) = true then ausgabe else showmessage('Es gibt keine Loesungen für n Damen auf diesem n mal n großen Feld'); end;
end. |