路径生成算法混淆

时间:2015-01-07 00:56:27

标签: javascript algorithm

我在创建路径生成算法here时请求了一些帮助,其中Taekahn非常慷慨地帮助我。除了一个部分IsNotMarked函数之外,我理解他的所有代码。

FIDDLE

function IsNotMarked(row, column) {
    //if row is out of bounds, it is not marked
    if (row < 0 || row >= matrix.length) return true;

    //if column is out of bounds, it is not marked
    if (column < 0 || column >= matrix[row].length) return true;

    //if ahead node (east of East Node) is not part of path... it's not marked
    return matrix[row][column].data('partOfPath') != true;
}

即:return matrix[row][column].data('partOfPath') != true;

上面IsNotMarked()CreateNewFrontier()的函数应该检查每个方向(北,东,南,西)的相邻节点,首先检查它们是否在边界内......

然后AddToFrontier()应检查邻近那些节点(东节点以东的节点)的节点,以检查它们是否未标记(路径的一部分),因为要保持单个路径,一个节点只能有一个邻居。

问题:

1)我尝试更换

return matrix[row][column].data('partOfPath') != true;

if (matrix[row][column].data('partOfPath') == false) return true;

我认为意思相同,但它只标记根节点并且不起作用。这两个有什么不同?这不是真的吗,如果该节点不是路径的一部分,那么将IsNotMarked返回为真?

2)我还尝试通过简单地检查节点是否是IsNotMarked()中直接路径的一部分来完全删除AddToFrontier()来简化它,但现在根本没有绘制:

    if (row - 1 >= 0 && matrix[row-1][column].data('partOfPath') == true) { //check if it IS marked... 
        markedNeighbors++;
    }

任何帮助都会很棒!


enter image description here

1 个答案:

答案 0 :(得分:1)

matrix[row][column].data('partOfPath')既不是真也不是假(例如nullundefined),就会出现差异。

在这种情况下,以下语句返回true

return matrix[row][column].data('partOfPath') != true;

但是以下内容返回false(注意你还需要else语句):

if (matrix[row][column].data('partOfPath') == false)
    return true;
else
    return false;