일단 찍어 놓을테니까 좀 세줘- 라는 개념의 소스...다소 엽기 소스라 볼 수있을지도...-_-;;;
버튼1을 누르면 찾는 과정이 애니메이션(?) 됩니다..
여기 있는 소스들중 가장 인간적인(?) 소스라 자부함...png) (다들 어쩌면 그렇게 아이디어들이 번뜩이시는지)
 (다들 어쩌면 그렇게 아이디어들이 번뜩이시는지)
버튼1을 누르면 찾는 과정이 애니메이션(?) 됩니다..
여기 있는 소스들중 가장 인간적인(?) 소스라 자부함..
.png) (다들 어쩌면 그렇게 아이디어들이 번뜩이시는지)
 (다들 어쩌면 그렇게 아이디어들이 번뜩이시는지)~cpp 
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
var
  Table: array[0..8-1, 0..8-1] of Boolean;
procedure ClearTable;
var
  i, j: Integer;
begin
  for i := 0 to 8 -1 do
    for j := 0 to 8 -1 do
      Table[i, j] := False;
end;
function CountRow(row: Integer): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := 0 to 8-1 do
    if Table[i, row] then
      Inc(Result);
end;
procedure SetQueens(n: Integer);   // 퀸 배치하기. 이 소스의 핵심함수. n은 현재 사용안한다. 처음엔 RandomSeed로 쓰려했음..-_-;
var
  i, row: Integer;
begin
  ClearTable;
  for i := 0 to 8-1 do    //  가로 세로만 조건에 일치하도록 랜덤하게 배치함.
    while True do
    begin
      row := random(8);
      Table[i, row] := True;
      if CountRow(row) > 1 then
        Table[i, row] := False
      else
        Break;
    end;
end;
function CheckQueens: Boolean; // 제대로 배치되었는지 검사하는 함수.
  function CountColumn(column: Integer): Integer;
  var
    i: Integer;
  begin
    Result := 0;
    for i := 0 to 8-1 do
      if Table[column, i] then
        Inc(Result);
  end;
  function CountSlash(column: Integer): Integer;
  var
    i: Integer;
    x, y: Integer;
  begin
    Result := 0;
    for i := 0 to 8*2-1 do
    begin
      x := column - i;
      y := i;
      if (x > 7) or (y > 7) or (x < 0) or (y < 0) then
        Continue;
      if Table[x, y] then
        Inc(Result);
    end;
  end;
  function CountBackSlash(column: Integer): Integer;
  var
    i: Integer;
    x, y: Integer;
  begin
    Result := 0;
    for i := 0 to 8*2-1 do
    begin
      x := column + i;
      y := i;
      if (x > 7) or (y > 7) or (x < 0) or (y < 0) then
        Continue;
      if Table[x, y] then
        Inc(Result);
    end;
  end;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to 8-1 do
  begin
    if CountRow(i) > 1 then
      Exit;
    if CountColumn(i) > 1 then
      Exit;
  end;
  for i := 0 to 16-1 do
    if CountSlash(i) > 1 then
      Exit;
  for i := -8 to 8-1 do
    if CountBackSlash(i) > 1 then
      Exit;
  Result := True;
end;
procedure DrawQueens;
var
  i, j: Integer;
  x, y: Integer;
  r: TRect;
begin
  for i := 0 to 8 -1 do
    for j := 0 to 8 -1 do
    begin
      x := i * 32;
      y := j * 32;
      r := Bounds(x, y, 32, 32);
      if Table[i, j] then
        Form1.Canvas.Brush.Color := clRed
      else
        Form1.Canvas.Brush.Color := clWhite;
      Form1.Canvas.Rectangle(r);
    end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
  DrawQueens;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  n: Integer;
begin
  Randomize;
  n := 0;
  repeat
    SetQueens(n);
    Inc(n);
    DrawQueens;
  until CheckQueens;
end;
end.
모든 퀸 찾기. 이런건 반칙이다- 하셔도 별 할말이 없음 -_-;;;
30분동안 뭔가 다른 방법을 찾아 볼라고 고민을 했습니다만 포기.......-_-;;
30분동안 뭔가 다른 방법을 찾아 볼라고 고민을 했습니다만 포기.......-_-;;
~cpp  
procedure FindAllQueens;
var
  n: Integer;
  i0, i1, i2, i3, i4, i5, i6, i7: Integer;
begin
  n := 0;
  for i0 := 0 to 8-1 do
  for i1 := 0 to 8-1 do
  for i2 := 0 to 8-1 do
  for i3 := 0 to 8-1 do
  for i4 := 0 to 8-1 do
  for i5 := 0 to 8-1 do
  for i6 := 0 to 8-1 do
  for i7 := 0 to 8-1 do
  begin
    ClearTable;
    Table[0, i0] := True;
    Table[1, i1] := True;
    Table[2, i2] := True;
    Table[3, i3] := True;
    Table[4, i4] := True;
    Table[5, i5] := True;
    Table[6, i6] := True;
    Table[7, i7] := True;
    if CheckQueens then
    begin
      DrawQueens;
      Inc(n);
      form1.Caption := inttostr(n);
    end;
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  FindAllQueens;
end;













