回 帖 发 新 帖 刷新版面

主题:[原创]蛇形矩阵(完整版-受启发篇,感谢源程序提供者MOZ)

'蛇自右上角开始。初学者注意:后面五个if语句的顺序是有讲究的。
CLS : INPUT h, n: DIM s(h, n)
xx = 1: yy = 1: x = 0: y = n - 1
FOR i = 1 TO h * n
  x = x + xx: y = y + yy
  IF x < 1 OR x > h OR y < 1 OR y > n THEN xx = -xx: yy = -yy
  IF y > n AND x <= h THEN y = n
  IF x < 1 AND y >= 1 THEN x = 1
  IF x > h THEN x = h: y = y - 2
  IF y < 1 THEN y = 1: x = x + 2
  s(x, y) = i
NEXT i
FOR i = 1 TO h
  FOR j = 1 TO n: PRINT USING "###"; s(i, j); : NEXT j: PRINT
NEXT i
END

回复列表 (共10个回复)

沙发

'蛇自右下角出洞。(感谢原程序提供者)
CLS : INPUT h, n: DIM s(h, n)
x = h + 1: y = n - 1: xx = -1: yy = 1
FOR i = 1 TO h * n
  x = x + xx: y = y + yy
  IF x < 1 OR x > h OR y < 1 OR y > n THEN xx = -xx: yy = -yy
  IF x < 1 THEN y = y - 2: x = 1
  IF y > n THEN y = n
  IF y < 1 THEN y = 1: x = x - 2
  IF x > h THEN x = h
  s(x, y) = i
NEXT i
FOR i = 1 TO h
  FOR j = 1 TO n: PRINT USING "###"; s(i, j); : NEXT j: PRINT
NEXT i
END

板凳

'蛇自左下角出
CLS : INPUT h, n: DIM s(h, n)
x = h - 1: y = 0: xx = 1: yy = 1
FOR i = 1 TO h * n
  x = x + xx: y = y + yy
  IF x < 1 OR x > h OR y < 1 OR y > n THEN xx = -xx: yy = -yy
  IF y > n THEN y = n: x = x - 2
  IF x > h THEN x = h
  IF x < 1 THEN x = 1: y = y + 2
  IF y < 1 THEN y = 1
  s(x, y) = i
NEXT i
FOR i = 1 TO h
  FOR j = 1 TO n: PRINT USING "###"; s(i, j); : NEXT j: PRINT
NEXT i
END

3 楼

蛇形矩阵有8种!!!!!!!!!!!!!!!!!!
就算在同一个方向出洞的,也有两种,比如H=4,L=3,在左上角出洞:
(1)         1  2  6
              3  5  7
              4  8  11
              9  10 12

(2)         1  3  4
              2  5  9
              6  8  10
              7  11 12

4 楼


楼上那么牛的人,还需要提出八个的问题吗?掌握了方法,就是八十个还不是一样?

5 楼

REM 输入的h, l是蛇形矩阵的行列, m为模式, 范围为1--8
REM 相应的模式如果不知道,请查看效果
OPTION BASE 1
CLS
INPUT h, l
INPUT "mode:", m
IF h < 1 OR h > 22 OR l < 1 OR l > 20 OR m < 1 OR m > 8 OR h <> INT(h) OR l <> INT(l) OR m <> INT(m) THEN
   PRINT "ERROR!": END
END IF
DIM a(h, l)
IF m MOD 2 = 1 THEN x = 1: y = -1 ELSE x = -1: y = 1
FOR i = 1 TO h * l
    xx = xx + x: yy = yy + y
    IF xx < 1 OR xx > h OR yy < 1 OR yy > l THEN SWAP x, y
    IF xx > h THEN xx = h: yy = yy + 2
    IF yy > l THEN yy = l: xx = xx + 2
    IF xx < 1 THEN xx = 1
    IF yy < 1 THEN yy = 1
    a(xx, yy) = i
NEXT i
FOR i = 1 TO h: FOR j = 1 TO l
    IF m = 1 OR m = 2 THEN s = a(i, j)
    IF m = 3 OR m = 4 THEN s = a(i, l + 1 - j)
    IF m = 5 OR m = 6 THEN s = a(h + 1 - i, j)
    IF m = 7 OR m = 8 THEN s = a(h + 1 - i, l + 1 - j)
    IF s = 1 THEN COLOR 4
    IF s = 2 THEN COLOR 14
    IF s > 2 THEN COLOR 7
    PRINT USING "####"; s;
NEXT j: PRINT : NEXT i: END

8种都能打。

6 楼

能不能说一下详细的算法描述呀

7 楼

蛇形方阵共有8种变换方法,
从4个角起,每次都有2种方向可以变换,
若学会了其中的一种(要灵活),其它3种就不会怕的,
不过在变换的过程中,要有一些小小的变化~

8 楼

楼主说得有理!

9 楼

嗯嗯

10 楼

分步考虑也可以

我来回复

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