Cod sursa(job #1324372)

Utilizator kira2071Diana C kira2071 Data 22 ianuarie 2015 10:34:00
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
//mai treb "ordonate", si verificare la afizarea finala

struct nod{int info;
          nod *next;};
nod *p[50020],*u[50020];

int cd[50500],viz[50500],n,m;

int main()
{int x,y,i,val=0;
nod *q;
ifstream f("sortaret.in");
FILE *g;
g=fopen("sortaret.out","w");
f>>n>>m;

for(i=1;i<=m;i++)
    {
    f>>x>>y;
    q=new nod;
    q->info=y;
    //if(viz[y]==0)
        {viz[y]=1;
        if(p[x]==NULL)
            {p[x]=q;
            p[x]->next=0;
            u[x]=p[x];
            }
        else
            {u[x]->next=q;
            u[x]=q;
            u[x]->next=0;
            }
        viz[x]++;
        viz[y]++;
        }
    }


for(i=n;i>=1;i--)
    {
    if(p[i]==NULL)
        {
        if(viz[i]==0)
            {cd[++val]=i;
            viz[i]=-1;}
        }
    else
        {nod *r=p[i];
        while(r!=0)
            {if(viz[r->info]!=-1)
                {cd[++val]=r->info;
                viz[r->info]=-1;}
            r=r->next;
            }
        if(viz[i]!=-1)
            {cd[++val]=i;
            viz[i]=-1;}
        }
    }


//afis----------------------------------------------
for(i=val;i>=1;i--)
    fprintf(g,"%d ",cd[i]);


return 0;
}