== 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. }}} ---- EightQueenProblem