- 问题描述
画出一个3*3的网格,行列的抬头分别标记为白色、灰色和黑色。对于每个表格单元(i,j),请指出在对有向图进行深度优先搜索的过程中,是否可能存在一条边,连接一个颜色为i的结点和一个颜色为j的结点。对于每种可能的边,指明该种边的类型。另外,请针对无向图的深度优先搜索在制作一张这样的网格。 - 问题求解
深度优先搜索可以对输入图的边进行分类:
树边:在深度优先森林
Gπ
中的边。
后向边:结点u连接到其在深度优先树中的一个祖先结点v的边。
前向边:将结点u连接到其在深度优先树中的一个后代结点v的边。
横向边:其他所有的边,包括连接同一棵深度优先树中的结点(其中一个结点不是另外一个结点的祖先),和连接不同深度优先树中的两个结点。
①对于有向图
起(u)\止(v) | 白 | 灰 | 黑 |
---|
白 | 所有可能 | 后,横 | 横 |
灰 | 前,横 | 树,后,前 | 树,前,横 |
黑 | 横 | 横,后 | 所有可能 |
A12:
因为v结点先与u结点被发现,所以n->v边不在树中,且不可能是前向边。
A13:
v.d< v.f< u.d< u.f,则[u.d,u.f]与[v.d,v.f]完全分离,此时u->v是横边。
A21:
u.d< v.d,那么有两种情况,如果u.f< v.d,则[u.d,u.f]与[v.d,v.f]完全分离,此时u->是横边;如果u.f>v.d,则
[v.d,v.f]⊂[u.d,u.f]
,此时v是u的后代,u->v是前向边。
A22:
由于u和v都是灰色,可以肯定它们都处于一棵深度优先树的一条路径中,不可能是横向边。
A23:
u.f>v.f ,所以v不可能是u的祖先,因此u->v不可能是后向边。
A31:
u.d< v.d< u.f< v.f,则[u.d,u.f]与[v.d,v.f]完全分离,此时u->是横边。
A32:
u.f< v.f。那么有两种情况,如果v.d>u.f,则[u.d,u.f]与[v.d,v.f]完全分离,此时u->是横边;如果v.d< u.f,则
[u.d,u.f]⊂[v.d,v.f]
,此时u->v是后向边。
而其他情况都是可以取到树边、后向边、前向边和横边的,最终得到的结果如上表所示。
②对于无向图
对于树边,后向边,前向边,连个结点可以是任意颜色。只有横边不能取两个灰色结点,所以有下标:
(空) | 白 | 灰 | 黑 |
---|
白 | 所有可能 | 所有可能 | 所有可能 |
灰 | 所有可能 | 树,后,前 | 所有可能 |
黑 | 所有可能 | 所有可能 | 所有可能 |