Pagini recente » Cod sursa (job #2374627) | Cod sursa (job #2377989) | Cod sursa (job #2530919) | Cod sursa (job #628606) | Cod sursa (job #1557204)
#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);
}