路径生成算法混淆

Path generation algorithm confusion

我在创建路径生成算法时寻求帮助 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;

我觉得意思是一样的,但是它只标记了根节点并且不起作用。这两个有什么不同?是不是真的,如果那个节点不是路径的一部分,那么 return IsNotMarked 是真的吗?

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

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

任何帮助都会很棒!


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

在这种情况下,下面的语句returns true

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

但下面的 returns 错误(注意你还需要 else 语句):

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