【题目链接】
【算法】
直接暴力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;
}