关于marked数组处理

关于marked数组处理,分3种情况

1一般的遍历(遍历结点), marked数组一旦标记上就不会再unmark,即一个结点访问一次

2有无路径,求任意一条路径,有无环问题,

  同1,mark了就不会unmark,因为如果之前经过这个点,没有路径,或者没有环,那么这次也不会有;而如果有路径或者有环,之前就得到结果退出了

3所有路径:

 是否unmark看情况,如果经过这个点有通路,也就是任意一条边的方向上有通路,则这个点要unmark,因为可以作为另一条合法路径的子路径。如果经过这个点没通路,则不unmark,已经知道是死路,别的前驱就不必再进入了。


节点的访问情况可以有多种状态,0 代表未访问过,1代表访问中(in stack), 2 代表之前访问过。第三种情况可以继续细分,1)之前访问过且有路径2.1,2)之前访问过但不存在路径2.2。具体的,多路径问题,marke状态为0或者2.1则可以进入,状态为1或者2.2则不进入。


你可能感兴趣的:(图论,隐式图,算法)