在矩阵中插入单词的算法

时间:2014-11-13 13:14:26

标签: javascript algorithm matrix

我有单词数组(例如岛,狗,猫,新闻)和空矩阵4x4。 如何将单词插入矩阵中,单词可能是弧形的?

结果示例: enter image description here

我可以使用什么算法?

我尝试用js做,但是没有想法。

var wordPazzle = {
    words : ['island', 'dog', 'cat', 'news'],
    generateMatrix : function() {
        //apply algorithm this
    }
}

更新:我看到Lee algorithm,但不知道如何将其应用于我的功能。

2 个答案:

答案 0 :(得分:0)

使用以下路径,我得到一个有效的矩阵:

1   2   3   4
8   7   6   5
9   10  11  12
13  14  15  16

此路径的实现非常简单。

function generateMatrix(length, height, words){
    wordConcatenated = words.join("");
    matrix=[]
    count = 0;
    for (var y = 0; y < height; y++){
        matrix[y] = [];
        for (var x = 0; x < length; x++){
            if (y%2){
                index = length - 1 - x;
            } else {
                index = x;
            }
            matrix[y][index] = wordConcatenated[count];
            count++;
        }
    }

    console.log(matrix)
}

generateMatrix(4,4, ['island', 'dog', 'cat', 'news']);

答案 1 :(得分:0)

所以,如果你需要任何有效矩阵,那么只需选择任何有效的方向(例如

1 2 3 4

8 7 6 5

9 10 11 12

16 15 14 13

var wordPazzle = {
    words : ['island', 'dog', 'cat', 'news'],
    generateMatrix : function() {
        var a = [];
        for ( var i = 0; i < 4; i++ )
            a[i] = [];
        var w = this.words, i0 = 0, j0 = 0;
        for ( var i = 0; i < w.length; i++ ) {
            for ( var j = 0; j < w[i].length; j++ ) {
                a[i0][j0] = w[i][j];

               if (i0%2 == 0 ) {
                   if (j0 < 3 ) 
                       j0++;
                   else 
                       i0++;
               } else {
                   if (j0 > 0)
                       j0--;
                   else
                      i0++;
               }
            }
        }
        console.log(a);
        return a;
   }
};