Cod sursa(job #308274)

Utilizator APOCALYPTODragos APOCALYPTO Data 26 aprilie 2009 17:24:53
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<string.h>

int main()
{int n,r,i,j,a[100][100],l[1000],x,y,z,viz[1000],k,nr,np[1000];
char s[100],*p,t1,t2;
ifstream fin("DEZB.IN");
 fin>>n>>r;




for(i=1;i<=n;i++)
 for(j=1;j<=n;j++)
  a[i][j]=0;
for(i=1;i<=n;i++)
  np[i]=0;
for(i=1;i<=r;i++)
  {fin.get();
  fin.get(s,100);


  x=atoi(s);
  p=s;

  while((*p<='9')&&(*p>='0'))
     p++;
  t1=*p;
  p=p+1;

  strcpy(s,p);
  y=atoi(s);
  p=s;
  while((*p<='9')&&(*p>='0'))
     p++;
  t2=*p;
  p=p+1;
  strcpy(s,p);
  z=atoi(s);
  if(t1==',')
     if(t2=='<')
	   {a[z][x]=1;
	   a[z][y]=1;
	   np[x]++;
	   np[y]++;}
	 else
	    {a[x][z]=1;
	    a[y][z]=1;
	    np[z]+=2;}

    else
       if (t1=='<')
	     {a[y][x]=1;
	     a[z][x]=1;
	     np[x]+=2;}
	   else
	     {a[x][y]=1;
	     a[x][z]=1;
	     np[y]++;
	     np[z]++;}

  }
  for(i=1;i<=n;i++)
    viz[i]=0;
  k=0;
  nr=0;
  fin.close();
  while(nr<n)
   {
   for(i=n;i>=1;i--)
    if((np[i]==0)&&(viz[i]==0))
	{k=k+1;
	l[k]=i;
	viz[i]=1;
	for(j=1;j<=n;j++)
	 if((a[i][j]==1)&&(j!=i))
	   {a[i][j]=0;
	   np[j]--;
	   }
	break;
	}
   nr++;
   }
ofstream fout("dezbateri.out");
    if(k<n)
      fout<<0;
     else
      for(i=k;i>=1;i--)
       fout<<l[i];
fout.close();
  return 0;
}