回 帖 发 新 帖 刷新版面

主题:八皇后问题,谁能给出代码?

众所周知的八皇后问题,教科书上和代码太繁,谁能给出更简便的代码?

回复列表 (共8个回复)

沙发

代码很繁吗?一个最基本的搜索,能有多繁?

板凳

faintzw写过一个深搜的代码,在置顶的经典集锦中有。他的这个比一般的回溯算法在效率上要高的多。

3 楼

我的也是回溯,怎么能快得多嘛……

4 楼

呵呵

5 楼

个个都在说,却没看到有人写,是不是太简单了?
对于算法,我可是一窍不通
对于方法,我可以慢慢想
别人想得到我想不到的,是因为别人的眼界开阔基础高起点高
我想得到的是因为我的眼角有点偏.

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 楼

然后又看到有人说标志起来会比较快
那我又试试标志怎样做
只是没感觉到能快多少

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 楼

大可以整一个8层循环

(我基本上也是实用派的,只要能解决问题,管它什么算法不算法)

8 楼

8层循环是可以,
但是时间上不好安排,
有的可以提前忽略的地方不好处理。
而且不太好扩展。

我来回复

您尚未登录,请登录后再回复。点此登录或注册