Cod sursa(job #1461109)

Utilizator TeodorescuStefanEduardTeodorescu Stefan Eduard TeodorescuStefanEduard Data 14 iulie 2015 18:57:43
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

#define nmax 50005

int m,n,k=0,check[nmax];

struct nod{
	int info;
	nod* next;
} *lista[nmax], *p;

void citeste(fstream&);
void df(int,fstream&);


int main()
{
	fstream in("sortaret.in", ios::in);
	fstream out("sortaret.out", ios::out);

	int i,j,k;
	
	citeste(in);

	
	for(i=1;i<=n;i++)
    {
        cout<<i<<" - ";
        p=lista[i];
        while(p)
        {
            cout<<p->info<<" ";
            p=p->next;
        }
        cout<<endl;
    }
	
	for(i=1;i<=n;i++)
		df(i,out);






	return 0;
}

void citeste(fstream& in)
{
	int i,j;
	in>>n>>m;
	while(in>>i>>j)
	{
		p=new nod;
		p->info=j;
		if(!lista[i])
		{
		lista[i]=p;
		p->next=0;
		}
		else if(lista[i]->info > p->info)
		{
			p->next=lista[i];
			lista[i]=p;
		}
		else
		{
			nod *q=lista[i];
			while(q->next!=0 && q->next->info<p->info && q->next->info != p->info)
				q=q->next;
			if(q->next== 0)
			{
			q->next=p;
			p->next=0;
			}
			else if(q->next->info>p->info)
			{
				p->next=q->next;
				q->next=p;
			}
			else
			{
				delete p;
			}
		}
	}
}


void df(int node,fstream& out)
{
    check[node]=1;

	out<<node<<" ";

	nod *q=lista[node];
	while(q)
	{
		if(check[q->info]==0)
			df(q->info,out);
		q=q->next;
	}
	
	
}