#include <cstdio> #include <cstdlib> const int MAXN = 50; // 最大顶点数 int mat[MAXN][MAXN]; // 无向图的邻接矩阵 bool visited[MAXN]; // 标记顶点是否被访问过的数组 int n; // 顶点的个数 void DFS(int node) { visited[node] = true; printf("%d ", node); for (int i = 0;i < n;i++) { if (!visited[i] && mat[node][i] == 1) { // 找到了下一个可以访问的顶点 DFS(i); } } } int main() { scanf("%d", &n); for (int i = 0;i < n;i++) { // 读入无向图的邻接矩阵 for (int j = 0;j < n;j++) { scanf("%d", &mat[i][j]); } } for (int i = 0;i < n;i++) visited[i] = false; for (int i = 0;i < n;i++) { if (!visited[i]) { // 找到了一个新的连通块 DFS(i); puts(""); } } return 0; } /************************************************************** Problem: 2161 User: admin Language: C++ Result: Accepted Time:15 ms Memory:1156 kb ****************************************************************/