拓扑排序,不开心持续中
#include<iostream>
#include<queue>
#include<cstring>
#include<vector>
#define maxn 2100
using namespace std;
vector<vector<int> >mapp;
int head[maxn];
int n;
void solve()
{
queue<int>root;
for(int i=0;i<n;i++)
{
if(!head[i]) root.push(i);
}
int re=0;
while(root.size())
{
int x=root.front();
root.pop();
re++;
head[x]--;
for(int i=0;i<mapp[x].size();i++)
{
head[mapp[x][i]]--;
if(!head[mapp[x][i]]) root.push(mapp[x][i]);
}
}
if(re==n) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
int main()
{
cin.sync_with_stdio(false);
int t;
cin>>t;
int ca=1;
while(t--)
{
for(int i=0;i<n;i++) head[i]=0;
cin>>n;
string str;
mapp.resize(n);
for(int i=0;i<n;i++)
{
cin>>str;
for(int j=0;j<str.size();j++)
{
if(str[j]=='1') mapp[i].push_back(j),head[j]++;
}
}
cout<<"Case #"<<ca<<": ";
ca++;
solve();
}
return 0;
}