U E D R , A S I H C RSS

Eight Queen Problem/da_answer

Project2.exe (Delphi)


œ„‚คŠ” จธฆฌ„ธ‚˜๊ณ  ฒ˜Œผ.. -_-;;  œŒ€กœ “ฐ๊ณ  žˆŠ”๊ฑ€ ž˜ ๊ฒ ๊ตฐš”...

Œ€€ถ„ C, C++ ˜น€ žฐ”กœ ž‘„ฑ•˜…จ˜ฐ...  „ ธŒŒกœ –ˆŠต‹ˆ‹ค.
‚ฌ‹ค œ„— USES‚˜ ผ, ฒ„Šผ, ฆญฒค“ฑ€ ณ„ •„𔗆Д €ถ„ธฐ... ^^;;;

 „ € งŽ —ˆ ‘ผ..T_T  œ †ŒŠคŠ” ‹œ ˆˆงŒ •„”„‹ค ๊ฒ‹ˆ‹ค.

ˆฐ˜— ฐฉ–ฅ„ ž˜žก•„ งŽ • จน—ˆŠต‹ˆ‹ค. ๊ทธ๊ฒƒ•€‹œ ‹œ๊ฐ„„ งŽ žก•„จน—ˆ๊ณ ...
งต„ RECORDกœ  •˜ •œ ‹คŒ •œ ผธ— •˜‚˜”ฉ —ฌ™•„ ˜ฌ ค †“๊ณ  ๊ทธ •Œงˆ‹ค ๊ณต๊ฒฉ ๊ฐ€Šฅ ŒจŠคฅผ ‹ค €šฐŠ”(?) ฐฉ‹œผกœ •˜ ค–ˆŠ”ฐ...
 ‡๊ฒŒ •˜ “ธฐ—†Š” ฃจ”„ฅผ Œ€ •Š•„„ ˜€งŒ ‹ ๊ฒฝ“ธ๊ฒŒ € งŽ”๊ตฐš”.. -_-;;

™”žฅ‹ค—„œ ณผ ผ„ „œ € ƒ๊ฐ•Š”ฐ...  œ๊ฐ€ „ˆ – ต๊ฒŒ ง„–‰•˜๊ณ  žˆŠ”“ฏ ‹ถ”๊ตฐš”.
๊ทธž˜„œ ฐฉ‹„ ฐ”๊ฟจŠต‹ˆ‹ค.
๊ณต๊ฒฉ ŒจŠค— “ค–๊ฐ€€ •ŠŠ” œ„น˜— ˜ฌ ค †“Š”๊ฒŒ •„‹ˆผ ผ‹จ ˜ฌ ค †“๊ณ  ๊ณต๊ฒฉฐ›„ ˆ˜ žˆŠ”๊ฐ€ ฌ•˜Š” ฐฉ‹œผกœš”.. ^^;;

 œ๊ฐ€ ฝ””ฉ„ •  •Œงˆ‹ค АผŠ”  €˜ ฌธ œ ธฐ..
•ƒ ฝ””ฉ ‚˜ ˆฐ˜— „ค๊ณ„•œ ๊ฒƒ๊ณผŠ” € ‹คฅธ ฐฉ–ฅœผกœ ‚˜๊ฐ€žˆ”๊ตฐš”.. -_-;;
ฒˆ—„ ™ € ๊ฒŒ € –„ค”ˆ...

‹œ๊ฐ„ ˜ ฝ”“œ  •ฆฌผ„ € •˜ ค๊ณ  –ˆŠ”ฐ...
ฒŒจ ‹œ๊ฐ„.. -_-;;;; ˜ค›„Š” ๊ฑธกœ ‹ค ‚  คจน—ˆ„คš”.


œ„— †ŒŠค“ค„ Š”ฐ ™•‹คžˆ  „ —ˆ ‘ผŠ”๊ฒŒ ‹ค‹œ •œฒˆ А๊€„คš”.. T_T
‚œ –ธ œฏค ๊ณ ˆ˜๊ฐ€ ˜ ค‚˜~~




ผ... 2ฒˆฌธ œ... ฒ˜Œ€„ฐ ๊ณ„š 2จผฌธ œ˜ š”๊ตฌ‚ฌ•„ ถฉกฑ‹œ‚คŠ” ฐฉ–ฅ—ˆ๊ธฐ •€‹œ..
 „ ‹น—ฐžˆ ๊ทธ ‡๊ฒŒ •œค„ •Œ•˜๊ฑงŒ..  œ๊ฐ€ ญ”๊ฐ€ ž˜•˜๊ณ  žˆ—ˆ—ˆ„คš”... -_-;;;

•„ฆฌ „ †ŒŠคŠ” “  ŒจŠคฅผ ๊ตฌ•˜Š”๊ฑฐ... ƒ•˜‹ค... ƒ๊ฐ•˜‹ค๊ฐ€...
˜น‹œ‚˜ ‹ถ–„œ ถœ ฅ€ถ„„ ฆฌ‹œธŒ •ˆœผกœ ˜ฎ๊ฒจ†“œผ‹ˆ.. ž˜ ‚˜˜คŠ”๊ตฐš”.. -_-;;


๊ทธ‚˜ €‚˜...
‚œ ฉ”ฌ„ŒŠธŠ” ™œ ˜ฌ ค †“€๊ฑฐ€.. -_-;; –ฐจ”ผ showMessageกœ —ฌค„๊ฑฐ˜€œผ„œ....

~cpp 
<script>
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  CBoardSize = 8;

type
  TQueenPos = record
    X: integer;
    Y: integer;
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure SearchStart();
    function getNextQueenPos(index, X, Y:integer):boolean;
    function checkRule(X,Y:integer):boolean;
    { Private declarations }
  public
    QueenPosArr: array of TQueenPos;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SearchStart();
end;

procedure TForm1.SearchStart();
var
  i, j: integer;
begin
  setLength(QueenPosArr, CBoardSize);
  for i:=0 to CBoardSize-1 do
  begin
    QueenPosArr[i].X := -1;
    QueenPosArr[i].Y := -1;
  end;

  for i:=0 to CBoardSize-1 do
  begin
    QueenPosArr[0].X := 0;
    QueenPosArr[0].Y := i;
    showMessage(inttostr(i));
    if getNextQueenPos(0, QueenPosArr[i].X, QueenPosArr[i].Y) then
    begin
      for j:=0 to CBoardSize-1 do
      begin
        showMessage(inttostr(QueenPosArr[j].X)+'-'+inttostr(QueenPosArr[j].Y));
      end;
    end
    else
    begin

    end;
 end;
end;

function TForm1.getNextQueenPos(index, X, Y:integer):boolean;
var
  i: integer;
  nowIndex: integer;
begin
  for i:=0 to CBoardSize-1 do
  begin
    nowIndex := index+1;
    QueenPosArr[nowIndex].X := nowIndex;
    QueenPosArr[nowIndex].Y := i;
    if checkRule(QueenPosArr[nowIndex].X, QueenPosArr[nowIndex].Y) then
    begin
      if nowIndex = 7 then
      begin
        result := true;
        exit;
      end
      else
      begin
        if getNextQueenPos(nowIndex, QueenPosArr[nowIndex].X, QueenPosArr[nowIndex].Y) then
        begin
          result := true;
          exit;
        end
        else
        begin
          QueenPosArr[nowIndex].X := -1;
          QueenPosArr[nowIndex].Y := -1;
        end;
      end;
    end
    else
    begin
      QueenPosArr[nowIndex].X := -1;
      QueenPosArr[nowIndex].Y := -1;
      if i = CBoardSize-1 then
      begin
        result := false;
      end;
    end;
  end;
end;

function TForm1.checkRule(X,Y:integer):boolean;
var
  i: integer;
begin
  for i:=0 to X-1 do
  begin
    if QueenPosArr[i].X > -1 then
    begin
      if (X=QueenPosArr[i].X) or (Y=QueenPosArr[i].Y) or ((Y-X)=(QueenPosArr[i].Y-QueenPosArr[i].X)) or ((Y+X)=(QueenPosArr[i].Y+QueenPosArr[i].X)) then
      begin
        result := false;
        exit;
      end;
    end;
  end;
  result := true;
end;

end.




~cpp 
<script>
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  CBoardSize = 8;

type
  TQueenPos = record
    X: integer;
    Y: integer;
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure SearchStart();
    function getNextQueenPos(index, X, Y:integer):boolean;
    function checkRule(X,Y:integer):boolean;
    { Private declarations }
  public
    QueenPosArr: array of TQueenPos;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SearchStart();
end;

procedure TForm1.SearchStart();
var
  i: integer;                          // <------ €ˆ˜ ‚ญ œ...
begin
  setLength(QueenPosArr, CBoardSize);
  for i:=0 to CBoardSize-1 do
  begin
    QueenPosArr[i].X := -1;
    QueenPosArr[i].Y := -1;
  end;

  for i:=0 to CBoardSize-1 do
  begin
    QueenPosArr[0].X := 0;
    QueenPosArr[0].Y := i;
    showMessage(inttostr(i));
    if getNextQueenPos(0, QueenPosArr[i].X, QueenPosArr[i].Y) then
    begin

    end
    else
    begin

    end;
 end;
end;

function TForm1.getNextQueenPos(index, X, Y:integer):boolean;
var
  i, j: integer;                //<------- €ˆ˜ ถ”๊ฐ€
  nowIndex: integer;
begin
  for i:=0 to CBoardSize-1 do
  begin
    nowIndex := index+1;
    QueenPosArr[nowIndex].X := nowIndex;
    QueenPosArr[nowIndex].Y := i;
    if checkRule(QueenPosArr[nowIndex].X, QueenPosArr[nowIndex].Y) then
    begin
      if nowIndex = 7 then
      begin

//************************************* —„œ ถœ ฅ•˜Š” ฐฉ‹œผกœ €™˜
        for j:=0 to CBoardSize-1 do
        begin
          showMessage(inttostr(QueenPosArr[j].X)+'-'+inttostr(QueenPosArr[j].Y));
        end;
//*************************************
        result := true;
        exit;
      end
      else
      begin
        if getNextQueenPos(nowIndex, QueenPosArr[nowIndex].X, QueenPosArr[nowIndex].Y) then
        begin
          result := true;
          exit;
        end
        else
        begin
          QueenPosArr[nowIndex].X := -1;
          QueenPosArr[nowIndex].Y := -1;
        end;
      end;
    end
    else
    begin
      QueenPosArr[nowIndex].X := -1;
      QueenPosArr[nowIndex].Y := -1;
      if i = CBoardSize-1 then
      begin
        result := false;
      end;
    end;
  end;
end;

function TForm1.checkRule(X,Y:integer):boolean;
var
  i: integer;
begin
  for i:=0 to X-1 do
  begin
    if QueenPosArr[i].X > -1 then
    begin
      if (X=QueenPosArr[i].X) or (Y=QueenPosArr[i].Y) or ((Y-X)=(QueenPosArr[i].Y-QueenPosArr[i].X)) or ((Y+X)=(QueenPosArr[i].Y+QueenPosArr[i].X)) then
      begin
        result := false;
        exit;
      end;
    end;
  end;
  result := true;
end;

end.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:12
Processing time 0.0135 sec