Cod sursa(job #1557204)

Utilizator Rotsching_Cristofor_323CARotsching Cristofor Rotsching_Cristofor_323CA Data 27 decembrie 2015 00:01:43
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <stdio.h>
#include <iostream>

using namespace std;

#define ALB 0
#define GRI 1
#define NEGRU 2

class Nod{
	
	int id; 
	int indx;
	Nod ** vecini;
	int culoare ;
public:
	Nod() : id(0), indx(0) , vecini(NULL) , culoare(ALB){};
	Nod(int a) : id(a) ,indx(0) , vecini(NULL) , culoare(ALB) {};
	
	void addVecin(Nod * vecin){
		if(vecini == NULL)
			vecini = new Nod *[100];
		vecini[indx] = vecin;
		indx ++;
		
		cout << "Adding to " << id << " " << vecin->id << "\n";
	}
	
	int getCuloare(){
		return culoare;
	}
	
	void setCuloare(int color){
		culoare = color;
	}
	
	int getID(){
		return id;
	}
	
	int getIndx(){
		return indx;
	}
	
	Nod ** getVecini(){
		return vecini;
	}
};

int N , M;
Nod * noduri;

void read();
void combine(int,int);
void dfs(Nod *, FILE *);

int main(){
	
	read();
	
	FILE * outFile = fopen("sortaret.out" , "w+");
	
	dfs(&noduri[0], outFile);
	return 0;
}

void read(){
	
	FILE * inFile = fopen("sortaret.in" , "r");
	fscanf(inFile , "%d %d\n" , &N , &M);
	cout << "N = " << N << " M = " << M << "\n" ;
	noduri = new Nod[N];
	
	for(int i = 0 ; i < N ; ++i){
		noduri[i] = Nod(i + 1);
	}
	
	for(int i = 0 ; i < M ; ++i){
		int id;
		int vecin;
		fscanf(inFile , "%d %d\n" , &id, &vecin);
		cout  << "id = " << id << " vecin = " << vecin << "\n" ;
		combine(id - 1, vecin - 1);
	}
}

void combine(int id , int vecin){
	Nod * pNod = &noduri[id];
	Nod * pVecinNod = &noduri[vecin];
	pNod->addVecin(pVecinNod);
	
}

void dfs(Nod * start , FILE * outFile){
		
	cout << "Visiting " << start->getID() << "\n";
	if(start->getIndx() == 0)
	fprintf(outFile , "%d " , start->getID());
	start->setCuloare(GRI);
	for(int i = 0 ; i < start->getIndx() ; ++i){
		Nod * vecin = start->getVecini()[i];
		if(vecin->getCuloare() == ALB){
			dfs(vecin , outFile);
		}
	}
	start->setCuloare(NEGRU);
}