Cod sursa(job #176481)

Utilizator alzwdedVlad Mesco alzwded Data 11 aprilie 2008 12:26:35
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>

struct dubl {
    int x,y;
} mat[1000000];
int ord[1000000];
int max=0;
int n,m;
FILE *f,*g;
void citire();
void fai();

int main(){
    f=fopen("sortaret.in","r");
    g=fopen("sortaret.out","w");
    
    citire();
    fai();
    
    fclose(g);
    return 0;
}

void adauga(int i){
    if(ord[mat[i].y]!=0 && (ord[mat[i].x]+1<ord[mat[i].y])){
	ord[mat[i].y]=ord[mat[i].x]+1;
    }else if(ord[mat[i].y]==0){
	ord[mat[i].y]=ord[mat[i].x]+1;
    }
    if(max<ord[mat[i].y]){
	max=ord[mat[i].y];
    }
}

void fai(){
    int i;
    
    for(i=0;i<m;++i){
	adauga(i);
    }
    
    for(i=0;i<=max;++i){
	for(int j=0;j<n;++j){
	    if(ord[j]==i){
		fprintf(g,"%d ",j);
	    }
	}
    }
}

void citire(){
    fscanf(f,"%d%d",&n,&m);
    for(int i=0;i<m;++i){
	fscanf(f,"%d%d",&mat[i].x,&mat[i].y);
    }
}