Cod sursa(job #929906)

Utilizator Codrin09Sirboiu Codrin Codrin09 Data 27 martie 2013 12:42:57
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
using namespace std;
int i,b[100],j,x,y,OK,n,k,z,m;
void prel(int b[],int &n,int i)
{
    int j,OK=0,c[100],l,h;
    n=n+1;
    for(j=n;j>=i+1;j--) b[j]=b[j-1];
    b[i]=x;
    for(j=i+1;j<=n;j++)if(b[j]==x){n--;OK=1;l=j;break;}
    if(OK=1)
    {
        for(j=1;j<=l-i+1;j++)c[j]=b[i+j+2];
        h=1;
        for(j=l-i-2;j<=n;j++){c[j]=b[h];h++;}
        for(j=1;j<=n;j++)
        {
            b[j]=c[j];
        }
    }
}
int main()
{
   ifstream fin("sortaret.in");
   ofstream fout("sortaret.out");
   n=2;
   fin>>z>>m>>x>>y;
   b[1]=x;b[2]=y;
   for(k=2;k<=m;k++)
   {
       fin>>x>>y;
       OK=0;
       for(i=1;i<=n;i++)
       {
           if(b[i]==x){OK=2;break;}
           if(b[i]==y)
           {
                prel(b,n,i);OK=1;break;
           }
       }
       if(OK==0){n+=2;b[n-1]=x;b[n]=y;}
       if(OK==2)
       {
           for(i=1;i<=n;i++)if(b[i]==y){OK=1;break;}
           if(OK==2){n++;b[n]=y;}
       }

   }
   for(i=1;i<=n;i++)fout<<b[i]<<" ";
   fin.close();
   fout.close();
}