添加虚拟点建图降低复杂度
需求
存在一个大小为\(n\)的点集\(V_1\) 和 大小为\(m\)的点集\(V_2\),\(V_1\)中的每个点都需要向\(V_2\)中的每个点连一条边
\(n * m\)条边
当\(n\)和\(m\)数值较大或者需要建图多次时,一定概率会超内存或者遍历时超时
\(n + m\)条边
对于不同起点,相同终点,两条路径可以看为存在交点的,交点到终点的路径可以等效为一条,如果可以实现路径复用,既能够有效减少边数
因此一种解决方案为,在\(V_1\) 与 \(V_2\)之间添加一个虚拟点,\(V_1\)中的节点首先向虚拟点连边,再由虚拟点向\(V_2\)中的各个点连边