?? 8皇后問題.txt
字號(hào):
DECLARE SUB POut () '此函數(shù)用于顯示結(jié)果,就不作詳細(xì)介紹了
DECLARE FUNCTION Place! (kk AS INTEGER) '此函數(shù)用于判斷是否可以放置一個(gè)新皇后
DIM SHARED k AS INTEGER
DIM SHARED n AS INTEGER
CLS
getn:
PRINT "There is N*N space and N Queens,Please enter N=";
INPUT n
PRINT "While program is running,you can press [Esc] to stop."
PRINT "Press [G] to run without stop."
PRINT "Any other key to start..."
stops = 1
start:
key$ = INKEY$
IF LCASE$(key$) = "g" THEN
stops = 0
ELSEIF key$ = "" THEN
GOTO start
END IF
IF n < 1 THEN
CLS
PRINT "N must be an integer bigger than 0"
GOTO getn
END IF
'==================================
'前面都是說明性文字,與核心算法無關(guān)
'==================================
DIM SHARED x(1 TO n) AS INTEGER
x(1) = 0: k = 1 'k是當(dāng)前行,x(k)是當(dāng)前列
outs = 0
DO '對(duì)所有的行執(zhí)行以下語句
IF NOT k > 0 THEN EXIT DO
x(k) = x(k) + 1 '移動(dòng)到下一行
DO '判斷當(dāng)前行是否能夠放置皇后
IF NOT (x(k) <= n AND Place(k) = 0) THEN EXIT DO
x(k) = x(k) + 1
LOOP
IF x(k) <= n THEN '找到位置
IF k = n THEN '是完整解嗎?
POut '打印出當(dāng)前解。后面到goon標(biāo)簽處,都不是核心,不做講解了
outs = outs + 1
IF stops = 0 THEN GOTO goon
PRINT "[Esc] to Stop,Any other key to find next..."
waiting:
check$ = INKEY$
IF check$ = CHR$(27) THEN
PRINT "User Stoped."
PRINT "Untill now, Finds"; outs; "kinds places to set."
END
ELSEIF check$ = "" THEN
GOTO waiting
END IF
goon:
ELSE
k = k + 1 '轉(zhuǎn)向下一行
x(k) = 0
END IF
ELSE
k = k - 1 '回溯(這也就是最關(guān)鍵的地方了!!)
END IF
LOOP
PRINT "There's all"; outs; "kinds places to set."
FUNCTION Place (kk AS INTEGER)
DIM ii AS INTEGER
ii = 1
DO
IF NOT ii < kk THEN EXIT DO
IF x(ii) = x(kk) OR ABS(x(ii) - x(kk)) = ABS(ii - kk) THEN
' 同一列兩個(gè)皇后 統(tǒng)一斜線上兩個(gè)皇后
Place = 0 '返回值為0
GOTO fin
END IF
ii = ii + 1
LOOP
Place = 1
fin:
END FUNCTION
SUB POut
FOR lines = 1 TO n
PRINT "==";
NEXT
PRINT "="
FOR lines = 1 TO n
IF x(lines) > 1 THEN
FOR outspc = 1 TO x(lines) - 1
PRINT " *";
NEXT
PRINT " Q";
FOR outspc = 1 TO n - x(lines)
PRINT " *";
NEXT
PRINT
ELSEIF n > 1 THEN
PRINT " Q";
FOR outspc = 1 TO n - 1
PRINT " *";
NEXT
PRINT
ELSE
PRINT " Q"
END IF
NEXT
FOR lines = 1 TO n
PRINT "==";
NEXT
PRINT "="
END SUB
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -