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();
}
        
    

Download