主题:八皇后问题,谁能给出代码?
sddmj
[专家分:0] 发布于 2005-03-07 08:49:00
众所周知的八皇后问题,教科书上和代码太繁,谁能给出更简便的代码?
回复列表 (共8个回复)
沙发
faintzw [专家分:2660] 发布于 2005-03-07 13:22:00
代码很繁吗?一个最基本的搜索,能有多繁?
板凳
staa [专家分:3690] 发布于 2005-03-07 17:15:00
faintzw写过一个深搜的代码,在置顶的经典集锦中有。他的这个比一般的回溯算法在效率上要高的多。
3 楼
faintzw [专家分:2660] 发布于 2005-03-08 12:15:00
我的也是回溯,怎么能快得多嘛……
4 楼
staa [专家分:3690] 发布于 2005-03-09 10:58:00
呵呵
5 楼
moz [专家分:37620] 发布于 2006-04-11 13:56:00
个个都在说,却没看到有人写,是不是太简单了?
对于算法,我可是一窍不通
对于方法,我可以慢慢想
别人想得到我想不到的,是因为别人的眼界开阔基础高起点高
我想得到的是因为我的眼角有点偏.
h = 8
l = 8
q = 8
dim s(q)
color 7, 0
cls
for i = 1 to 8
for j = 1 to 8
locate i, j * 2
print "[]";
next j, i
x = 1
do
do
s(x) = s(x) + 1
if s(x) > q then
s(x) = 0
x = x - 1
if x < 1 then
print z
end
end if
color 7, 0
locate x, s(x) * 2
print "[]";
else
for i = 1 to (x - 1)
if s(x) = s(i) then exit for
if s(x) - x = s(i) - i then exit for
if s(x) + x = s(i) + i then exit for
next
if i = x then
color 2, 7
locate x, s(x) * 2
print "[]";
x = x + 1
end if
end if
loop until x > q
y$ = input$(1)
x = x - 1
color 7, 0
locate x, s(x) * 2
print "[]";
z = z + 1
loop until s(1) = q and x = 1
6 楼
moz [专家分:37620] 发布于 2006-04-11 14:01:00
然后又看到有人说标志起来会比较快
那我又试试标志怎样做
只是没感觉到能快多少
h = 8
l = 8
q = 8
dim y(h, l), s(q)
color 7, 0
cls
for i = 1 to 8
for j = 1 to 8
locate i, j * 2
print "[]";
next j, i
x = 1
do
do
s(x) = s(x) + 1
if s(x) > q then
s(x) = 0
x = x - 1
if x < 1 then end
p = -1
gosub add1
elseif y(x, s(x)) = 0 then
p = 1
gosub add1
x = x + 1
end if
loop until x > q
for i = 1 to q
for j = 1 to q
color 14, 0
if j = s(i) then color 14, 7
locate i, j * 2
print "[]";
next j, i
z = z + 1
print z
y$ = input$(1)
x = x - 1
p = -1
gosub add1
loop
add1:
a = s(x) - x
b = s(x) + x
for i = 1 to q
y(x, i) = y(x, i) + p
y(i, s(x)) = y(i, s(x)) + p
if (a+i)>0 and (a + i) <= q then y(i, a + i) = y(i, a + i) + p
if (b-i)>0 and (b - i) < q then y(i, b - i) = y(i, b - i) + p
next
return
7 楼
staa [专家分:3690] 发布于 2006-11-06 20:44:00
大可以整一个8层循环
(我基本上也是实用派的,只要能解决问题,管它什么算法不算法)
8 楼
moz [专家分:37620] 发布于 2006-11-06 22:53:00
8层循环是可以,
但是时间上不好安排,
有的可以提前忽略的地方不好处理。
而且不太好扩展。
我来回复