Cod sursa(job #928754)

Utilizator vladm97Matei Vlad vladm97 Data 26 martie 2013 17:46:31
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include<iostream>
#include<vector>
#include<string.h>
#define lmic 60000
#include<cstdlib>
using namespace std;

class graf{
private:
    int n;
    int m;
    vector<int>v[lmic];
    int *tata;
    int *parcurs;
    char *fin;
    char *fout;
public:
    graf(char*,char*);
    ~graf();
    void df(int,ofstream &);
    void tati();
    void sp();
    };

graf::graf(char*in,char*out){
tata=(int*)calloc(lmic,sizeof(int));
fin=new char[strlen(in)+1];
strcpy(fin,in);
fout=new char[strlen(out)+1];
strcpy(fout,out);
parcurs=(int*)calloc(lmic,sizeof(int));
}

graf::~graf(){
delete[] tata;
delete[] fin;
delete[] fout;
delete[] parcurs;
}

void graf:: df(int a,std::ofstream &g){
    parcurs[a]=1;
    cout<<a<<" ";
    g<<a<<" ";
for(int i=0;i<v[a].size();i++)
    if(parcurs[v[a][i]]==0)
        df(v[a][i],g);
}

void graf:: tati(){
ofstream g(fout);
for(int i=1;i<=n;i++)
    if(tata[i]==0)df(i,g);
}

void graf:: sp(){
ifstream f(fin);
int i,a,b;
f>>n;
f>>m;
for(i=1;i<=m;i++){
    f>>a>>b;
    v[a].push_back(b);
    tata[b]=1;
}
tati();
}


int main()
{
   graf A("sortare.in","sortare.out");
   A.sp();
}