给你一张竞赛图,问是否存在一个三元环,若存在,则输出任意一个三元环,否则输出-1
首先,竞赛图肯定可以生成一条链,这点纸上画画可以轻易证明
那么,对于已经存在的一条链,加入新点的时候,每次考察是否有环,若有,则输出,若无,则把新点加入更新成新链。
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
const int MAXN=5005;
char map[MAXN][MAXN];
vector<int > v;
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",map[i]);
v.push_back(0);
for(i=1;i<n;i++)
{
int l=0,r=i-1;
while(l<i&&map[i][v[l]]=='0')l++;
while(r>=0&&map[i][v[r]]=='1')r--;
if(r+1==l)
v.insert(v.begin()+l,i);
else
{
printf("%d %d %d\n",v[l]+1,v[r]+1,i+1);
break;
}
}
if(i==n)
printf("-1\n");
//system("pause");
return 0;
}