主题:求解~~~(高手来~~)
xq712000
[专家分:0] 发布于 2006-07-19 12:14:00
问一下:高斯的八皇后问题怎么解?
请给出详细解释~~~~
八皇后问题:会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8*8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。
回复列表 (共5个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2006-07-20 11:28:00
你可以搞个8层循环。
每个循环里,对外层循环没有占用的点进行条件分析,成立,进入下层;不成立,更换位置。
当然,这个思路简单,编程罗索。
采用“递归”方法,则思路麻烦,但简洁。
板凳
SDFF [专家分:50] 发布于 2006-07-20 15:34:00
用穷举法,八个循环,每个控制一个皇后的位置,每个都丛1 到64,代表64个格。[em11]
3 楼
xq712000 [专家分:0] 发布于 2006-07-20 15:37:00
谢谢~~ 我去试试~~
4 楼
老大徒伤悲 [专家分:29120] 发布于 2006-07-21 10:53:00
我有一个新发现:手工比计算机还简单!
第一步,画8*8的格子
第二步,随便方一个“皇后”,删掉同行、同列、45度斜线的所有鸽子;
………………
这样应该就可以了。
当然,用计算机这样模拟,也可以。
5 楼
593170024 [专家分:500] 发布于 2009-11-17 17:07:00
n 皇后要不要?
CLS
INPUT n
DIM a(n)
t# = TIMER
i = 1
WHILE i > 0
a(i) = a(i) + 1
IF a(i) > n THEN
a(i) = 0
i = i - 1
ELSE
f = -1
FOR j = 1 TO i - 1
IF a(i) = a(j) OR i + a(i) = j + a(j) OR i - a(i) = j - a(j) THEN f = 0: EXIT FOR
NEXT j
IF f = -1 THEN
IF i = n THEN GOSUB 10: S = S + 1 ELSE i = i + 1
END IF
END IF
WEND
PRINT S, TIMER - t#
END
10
FOR k = 1 TO i
PRINT USING "#"; a(k);
NEXT k
PRINT
RETURN
我来回复