|
node中in字段 说到in字段则必须说search_counter变量。search_counter是一个全局变量,但在一次find_routes过程中它的值保持不变。search_counter最小值是2(不可能是0和1)。 in变量用于判断某一格子在此次find_routes时是否已被访问过。此次find_routes没被访问过时,值是不确定的,但满足:1)是偶数;2)(in - search_counter <= 1u)成立,这个式子中in可能比search_counter小,但因为是无符号数,<还是成立。 对in变量,要标志node是否访问过,用个bool变量不是更简单,干吗要in又要search_counter,这不是增加复杂度吗?——这么做原因是nodes是个静态变量(node中的元素数是地图格子数,初始化须要点时间)。第N+1次用的是第N次操作结果,N+1次的in值自然也要基于N次in值。 要用bool变量标识的话,逃不掉各个node中开辟个状态变量方法,这个变量在搜索前全部置为false,访问过后置为true。用了以上in+serach_counter方法后,省略了这个全置false过程。 和in状态相关的另一个可能疑问,函数每次搜索前会调用nodes.resize,nodes.resize会不会把所有in复位为0? ——不会。以下是resize的函数实现:
|