#3684. 4-邻接矩阵-有向图-强连通

4-邻接矩阵-有向图-强连通

题目描述

给定一个有向图的邻接矩阵,判断该图是否是强连通图。如果是强连通图,输出 yes,否则输出 no

输入格式

• 第一行输入两个整数 nnmm,表示顶点数和边数(实际边数由邻接矩阵确定)。 • 接下来输入一个 n×nn \times n 的邻接矩阵,其中 A[i][j]=1A[i][j] = 1 表示存在从顶点 ii 到顶点 jj 的有向边,否则为 00

输出格式

• 输出一行,如果是强连通图则输出 yes,否则输出 no


样例输入 1(强连通图)

3 3
0 1 0
0 0 1
1 0 0

样例输出 1

yes

样例输入 2(非强连通图)

3 2
0 1 0
0 0 1 
0 0 0 

样例输出 2

no

代码说明

  1. 第一次DFS:遍历原图,按顶点完成时间的后序顺序记录到 order 向量中。
  2. 构造逆图:将有向图的所有边方向反转,得到逆图的邻接矩阵。
  3. 第二次DFS:按 order 的逆序(即原图后序的逆序)处理逆图顶点,统计强连通分量数量。
  4. 判断强连通性:若强连通分量数量为1,输出 yes,否则输出 no

测试用例1描述了一个环状有向图(0→1→2→0),属于强连通图,输出 yes。测试用例2描述了一个链状图(0→1→2),无法形成环,因此输出 no