我怎样才能得到螺旋方向数

时间:2013-12-26 07:40:54

标签: javascript jquery spiral

如何通过javascript获取下方图像的螺旋方向数

spiral direction number

如何通过javascript或jquery获取上面图像的螺旋方向数

请帮帮我

我希望通过螺旋方向得到2d数组的索引号

我希望得到这个数字序列

3X3 - > 0,1,2,5,8,7,6,3,4

4X5 - > 0,1,2,3,4,9,14,19,18,17,16,15,10,5,6,7,8,13,12,11

3 个答案:

答案 0 :(得分:2)

jsFiddle Demo

根据您的问题,您的网格存储的形式并不清楚;我假设一个HTML表。假设您的螺旋规则是尽可能向右,然后向下,然后向左,然后向上,根据需要重复,在jQuery / JS中实现的以下(不可否认的简单)算法应该为您找到正确的路径:

$.getCellAtIndex = function (row, col) {
    return $("table tr")
        .filter(":nth-child(" + row + ")")
        .find("td")
        .filter(":nth-child(" + col + ")")
        .not(".highlight")
        .first();
}

$(function () {
    var path = [];
    var row = 1;
    var col = 1;

    while (true) {
        var nextCell = $.getCellAtIndex(row, col);
        nextCell.addClass("highlight");
        path.push(nextCell);

        // Move right, if possible
        if ($.getCellAtIndex(row, col + 1).length > 0) {
            col++;
        }
        // Otherwise move down
        else if ($.getCellAtIndex(row + 1, col).length > 0) {
            row++;
        }
        // Otherwise move left
        else if ($.getCellAtIndex(row, col - 1).length > 0) {
            col--;
        }
        // Otherwise move up
        else if ($.getCellAtIndex(row - 1, col).length > 0) {
            row--;
        }
        // Can't spiral anymore:
        // Output path as comma-separated string
        else {
            $("span").text(function () {
                return path.map(function (elem) {
                    return $(elem).text();
                }).join(', ');
            });
            break;
        }
    }
});

答案 1 :(得分:1)

只需将当前xy存储在变量中,并在dxdy中保持“当前方向”,从(0, 0)开始并使用方向{ {1}}。

现在算法

  • 存储当前位置(1, 0)
  • 如果下一个地点y*width+x无效或已经访问过,请右转x+dx, y+dy
  • 转到下一个地点t=dy; dy=dx; dx=-t;

并对x+=dx; y+=dy;步骤重复此操作。

答案 2 :(得分:-1)

function a(quantity){
    var arr = new Array(quantity * quantity);
    var result = [];
    var start = false;

    for (var i = 0; i < arr.length; i++) {
      var step = i % quantity;

      if (step === 0) {
        result.push([]);

        start = !start;

      }

      if (start) {
        result[result.length - 1].push(i + 1);
      } else {
        result[result.length - 1].unshift(i + 1);
      }

    }

    return result;
}

console.log(a(3));