【语法】
一、隐蔽陷阱
5×5 的表按顺时针填 1 到 25,手写四条边循环时右边界多走一格,转第二圈发生覆盖,右下角出现重复数字,整表从此错位。
二、底层原理
边界收缩法:维护上下左右四条边界,沿上边左到右、右边上到下、下边右到左、左边下到上依次填数,每填完一条边把对应边界向内收一格,四边相交即收口。5×5 共 25 格,恰好填满不重不漏。
三、正确代码
核心填表(四边一轮一收缩):
local function spiral(n)
local m = {}
for i = 1, n do m[i] = {} end
local top, bottom, left, right = 1, n, 1, n
local v = 1
while v <= n * n do
for c = left, right do m[top][c] = v; v = v + 1 end
top = top + 1
for r = top, bottom do m[r][right] = v; v = v + 1 end
right = right - 1
for c = right, left, -1 do
m[bottom][c] = v; v = v + 1
end
bottom = bottom - 1
for r = bottom, top, -1 do
m[r][left] = v; v = v + 1
end
left = left + 1
end
return m
end
抽查两行(首行与中行):
local p = getplayerbyname("grid01")
local m = spiral(5)
sendmsg(p, 1, table.concat(m[1], ","))
sendmsg(p, 1, table.concat(m[3], ","))
四、引擎验证
5×5 首行输出 1,2,3,4,5,中行输出 15,24,25,20,7;25 格无一重复,与手绘路径逐格一致。
五、FAQ
问:逆时针怎么改?
答:四条边的行进方向整体对调即可。
问:奇偶尺寸有区别吗?
答:收缩法与奇偶无关,n×n 填 n² 格。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 线上事故:玩家装备耐久打空才发现,战力拦腰砍半,打不动怪又投诉掉率。耐久提醒立双档:耐久低于三成弹黄…
【语法】 一、机制原理 抛个坑:行列表格要变成列行,每格都搬一遍还新建了整张表——方形矩阵能不能原地换?转置沿对角线折返:只…
【游戏】 一、规则机制 隐蔽的坑:"最近浏览"里同一件商品重复出现五六次,足迹成了复读机。浏览足迹立两条:每次查看先在足迹里…
【语法】 一、机制原理 一行代码拆解:local bucket = math.floor(v / width)。数值分布统计…
【语法】 一、机制原理 一行代码拆解:setmetatable(cfg, {__index = DEFAULTS})。配置对…
【游戏】 一、规则机制 线上事故:结算时玩家追问"我到底打了多少",战斗中没有任何实时输出面板,事后对不上账。输出统计两步走…