浏览 2431 次
锁定老帖子 主题:蛇形数组算法讨论
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||||||
发表时间:2011-10-29
最后修改:2011-10-29
把 m* n 个整数以蛇形或 S 形填写到二维数组里,
var echo = function(str) { document.write(str); }; var s = function(totalX, totalY) { // 初始化一个二维数组 var a = new Array(totalX); for (var i=0; i< totalX; i++) { a[i] = new Array(totalY); } var x = 0; var y = 0; var total = totalX * totalY; var out = 0; // 起始的方向很重要,得能给 0, 0 之后的第一步判断出 right 的方向,由 if ('rightup' == direction && 0 == x ) {direction = 'right';} 知 right 前的方向是 rightup,所以起始方向用 rightup。 var direction = 'rightup'; // 开始转向和填数 while (out++ < total) { a[x][y] = out; if (('right' == direction && 0 == x) || ('down' ==direction && totalY-1 == y)) { direction = 'leftdown'; } // 额外加个条件 x < totalX-1,是为了在左下角时使其不会超出 y 坐标上限 else if (('leftdown' == direction && 0 == y && x < totalX-1) || ('rightup' ==direction && totalY-1 == y)) { direction = 'down'; } else if (('down' == direction && 0 == y) || ('right' ==direction && totalX-1 == x)) { direction = 'rightup'; } else if (('rightup' == direction && 0 == x ) || ('leftdown' ==direction && totalX-1 == x)) { direction = 'right'; } switch (direction) { case 'down': x++; break; case 'right': y++; break; case 'leftdown': x++;y--; break; case 'rightup': x--;y++; break; } } echo('<table border="1" cellspacing="0">'); for (var i=0; i< totalX; i++) { echo('<tr>'); for (var j = 0; j < totalY; j++) { echo('<td height="40" width="40">' +a[i][j]+ '</td>'); } echo('</tr>'); } echo('</table>'); }; s(5, 3); s(4, 4); s(3, 5);
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||||||||||||||||
返回顶楼 | ||||||||||||||||