U E D R , A S I H C RSS

Eight Queen Problem/용쟁호투

? 럿나?

C, C++, Python, Java, Delphi 나...는 Powerbuilder로 보고 게 되다...

리는 공격당 만들때 공격부를 는 방다...공격리나때까.....

는것던 GOTO문 다...

,객, 문 보고 , ... 다...디로 다! T_T

빌더 (eightqueenproblem.sra)

~cpp 
$PBExportHeader$eightqueenproblem.sra
$PBExportComments$Generated Application Object
forward
global type eightqueenproblem from application
end type
global transaction sqlca
global dynamicdescriptionarea sqlda
global dynamicstagingarea sqlsa
global error error
global message message
end forward

global type eightqueenproblem from application
string appname = "eightqueenproblem"
end type
global eightqueenproblem eightqueenproblem

type variables
Integer	il_attack [8,8] , il_limit = 1, il_queen_count = 1
String	is_solution[8]
end variables

forward prototypes
public function boolean wf_create_queen ()
public subroutine wf_reset_maze ()
public function boolean wf_chack_attack (integer ai_x, integer ai_y)
end prototypes

public function boolean wf_create_queen ();Integer li_x,li_y

Randomize(0)
Do While il_queen_count <= 8
	li_x = Rand(8)
	li_y = Rand(8)
	il_limit++
	IF il_limit >= 30000 THEN
		il_queen_count = 1
		RETURN FALSE
	END IF
	If wf_chack_attack(li_x, li_y) Then CONTINUE;
	is_solution[il_queen_count] = 'Queen No : ' + String(il_queen_count) + ' / X : ' + String(li_x) + ' / Y : ' + String(li_y)
	il_queen_count++
	il_limit = 1
LOOP

RETURN TRUE
end function

public subroutine wf_reset_maze ();Integer	li_x, li_y
String	ls_temp[8]

FOR li_x = 1 TO 8
	FOR li_y = 1 TO 8
		il_attack[li_x, li_y] = 0 //공격루 
	NEXT
NEXT

is_solution = ls_temp
end subroutine

public function boolean wf_chack_attack (integer ai_x, integer ai_y);//32767
Integer	li_x, li_y

Yield()

IF il_attack[ai_x,ai_y] = 1 THEN RETURN TRUE

FOR li_x = 1 TO 8
	il_attack[li_x,ai_y] = 1 //X Line 공격루 
NEXT

FOR li_y = 1 TO 8
	il_attack[ai_x,li_y] = 1 //Y Line 공격루 
NEXT


li_x = ai_x;li_y = ai_y;

IF li_x > li_y THEN
	li_x = li_x + (1 - li_y)
	li_y = 1
ELSEIF li_x < li_y THEN
	li_y = li_y + (1 - li_x)
	li_x = 1
ELSE
	li_x = 1
	li_y = 1
END IF
DO WHILE li_x <= 8 AND li_y <= 8
	il_attack[li_x,li_y] = 1 //x,y x+n,y+n방로 공격루
	li_x++
	li_y++
LOOP

li_x = 9 - ai_x;li_y = ai_y;
IF li_x > li_y THEN
	li_x = li_x + (1 - li_y)
	li_y = 1
ELSEIF li_x < li_y THEN
	li_y = li_y + (1 - li_x)
	li_x = 1
ELSE
	li_x = 1
	li_y = 1
END IF
DO WHILE li_x <= 8 AND li_y <= 8
	il_attack[9 - li_x,li_y] = 1 //x,y x-n,y+n방로 공격루
	li_x++
	li_y++
LOOP

RETURN FALSE
end function

on eightqueenproblem.create
appname="eightqueenproblem"
message=create message
sqlca=create transaction
sqlda=create dynamicdescriptionarea
sqlsa=create dynamicstagingarea
error=create error
end on

on eightqueenproblem.destroy
destroy(sqlca)
destroy(sqlda)
destroy(sqlsa)
destroy(error)
destroy(message)
end on

event open;NS:
wf_reset_maze()

IF NOT wf_create_queen() THEN GOTO NS
beep(5)
MessageBox('Solution',is_solution[1] + '~r' + &
                      is_solution[2] + '~r' + &
                      is_solution[3] + '~r' + &
                      is_solution[4] + '~r' + &
                      is_solution[5] + '~r' + &
                      is_solution[6] + '~r' + &
                      is_solution[7] + '~r' + &
                      is_solution[8])

end event
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:11
Processing time 0.0076 sec