主题:[原创]蛇形矩阵(完整版-受启发篇,感谢源程序提供者MOZ)
flyinggoon
[专家分:110] 发布于 2008-05-13 15:52:00
'蛇自右上角开始。初学者注意:后面五个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
最后更新于:2008-05-14 10:54:00
回复列表 (共10个回复)
沙发
flyinggoon [专家分:110] 发布于 2008-05-14 10:31:00
'蛇自右下角出洞。(感谢原程序提供者)
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
板凳
flyinggoon [专家分:110] 发布于 2008-05-14 10:46:00
'蛇自左下角出
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 楼
Mato完整版 [专家分:1270] 发布于 2008-05-14 22:32:00
蛇形矩阵有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 楼
flyinggoon [专家分:110] 发布于 2008-05-15 08:50:00
楼上那么牛的人,还需要提出八个的问题吗?掌握了方法,就是八十个还不是一样?
5 楼
Mato完整版 [专家分:1270] 发布于 2008-05-15 12:07:00
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 楼
guoqx [专家分:0] 发布于 2009-08-09 12:24:00
能不能说一下详细的算法描述呀
7 楼
天天和和 [专家分:1420] 发布于 2009-08-14 22:41:00
蛇形方阵共有8种变换方法,
从4个角起,每次都有2种方向可以变换,
若学会了其中的一种(要灵活),其它3种就不会怕的,
不过在变换的过程中,要有一些小小的变化~
8 楼
phile [专家分:2310] 发布于 2009-08-17 13:56:00
楼主说得有理!
9 楼
天天和和 [专家分:1420] 发布于 2009-08-23 19:12:00
嗯嗯
10 楼
phile [专家分:2310] 发布于 2009-08-24 12:17:00
分步考虑也可以
我来回复