题意:在一个有向图中找一个长度为3的回路。
做法:直接DFS,记录每条回边,然后就可以判断回路了
#include <iostream>
#include <cstdio>
const int LMT=5002;
using namespace std;
char gra[LMT][LMT];
int vis[LMT];
int a,b,c,n;
void dfs(int u,int pre)
{
if(a&&b&&c)return;
vis[u]=1;
int i=u;
for(int j=0;j<n&&(!a||!b||!c);j++)
if(gra[i][j])
{
if(pre!=-1&&gra[j][pre])
{
a=pre+1;b=i+1;c=j+1;
return;
}
if(0==vis[j])dfs(j,i);
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",gra[i]);
for(int j=0;j<n;j++)gra[i][j]-='0';
}
for(int i=0;i<n;i++)
if(0==vis[i]) dfs(i,-1);
if(!a)printf("-1");
else printf("%d %d %d",a,b,c);
return 0;
}