LSFIGHT - Đấu trường VM08
Tác giả: hieult
Ngôn ngữ: C++
#include <cstdio>
//#include <conio.h>
bool a[510][510],f[510][510],flag[510];
int n,so=0,A[510];
int main()
{
// freopen("LSFIGHT.in","r",stdin);
scanf("%d",&n);
int hieu,i,j,t,k;
for(i = 1;i<=n;i++)
for(j = 1;j<=n;j++)
scanf("%d",&a[i][j]);
for(i = 1;i<=n-1;i++)
f[i][i+1]=true; f[n][1] = true;
for(hieu = 2;hieu<=n-1;hieu++)
{
for(i = 1;i<=n;i++)
{
j = (i+hieu-1)%n+1;
if(j>i)
{
f[i][j] = false;
for(k = i+1;k<j;k++)
if(f[i][k] && f[k][j] && (a[i][k]||a[j][k]))
{
f[i][j] = true;
break;
}
}
else
{
f[i][j] = false;
for(k = i+1;k<=n;k++)
if(f[i][k] && f[k][j] && (a[i][k]||a[j][k]))
{
f[i][j] = true;
break;
}
for(k = 1;k<j;k++)
if(f[i][k] && f[k][j] && (a[i][k]||a[j][k]))
{
f[i][j] = true;
break;
}
}
}
}
for(i = 1;i<=n;i++)
{
flag[i] = false;
for(j = 1;j<=n ;j++)
{
if(j==i) continue;
else
{
if(f[i][j]&&f[j][i] &&a[i][j])
{
flag[i] = true;
break;
}
}
}
if(flag[i])
{
so++;
A[so] = i;
}
}
printf("%d\n",so);
for(i = 1;i<=so;i++)
printf("%d\n",A[i]);
// getch();
}