【题目链接】
【算法】
直接暴力dfs一遍,即可
【代码】
#include<bits/stdc++.h> using namespace std; #define MAXN 2010 int i,j,n,ans; char st[MAXN]; vector<int> e[MAXN]; bool vis[MAXN]; inline void dfs(int x) { int i; vis[x] = true; for (i = 0; i < e[x].size(); i++) { if (!vis[e[x][i]]) dfs(e[x][i]); } } int main() { scanf("%d",&n); for (i = 1; i <= n; i++) { scanf("%s",st+1); for (j = 1; j <= n; j++) { if (st[j] == '1') e[i].push_back(j); } } for (i = 1; i <= n; i++) { memset(vis,false,sizeof(vis)); dfs(i); for (j = 1; j <= n; j++) { if (vis[j]) ans++; } } printf("%d\n",ans); return 0; }