
#include "graphe.h"




void initialize_graph(graph * g){
    for (int i=0;i<MAXV;i++){
        g->edges[i]=NULL;
    }

    for (int i=0;i<MAXV;i++){
        g->degree[i]=0;
    }
   
 
    g->nedges=0;
    
}

void insert_edge(graph* g, int x ,int y, int p){
    
    
        edgenode* newnode = (edgenode*)malloc(sizeof(edgenode));
        newnode->y.val = y;
        newnode->y.poids = p;
        newnode->next = g->edges[x];
        g->edges[x]=newnode;
        g->degree[x]++;

      
    
    
        
    
  
}

void read_graph(FILE* f, graph* g){
    int i,j,p;
    initialize_graph(g);
        fscanf(f,"%d %d", &(g->nbvertices),&(g->nedges));
    for (int k = 0; k<g->nedges ;k++){
        fscanf(f,"%d %d %d\n ", &i, &j, &p);
        insert_edge(g,i,j,p);
    }

}

void free_liste(edgenode* l){
    if (l!=NULL){
    free_liste(l->next);
    free(l);
    }
}
void free_edges(graph* g){
    for (int i = 0 ;i<MAXV;i++){
        free_liste(g->edges[i]);

    }
}

void initialize_search(graph* g){
    for (int i=0;i<MAXV;i++){
        g->discovered[i]=false;
    }

}

void pp_rec(graph* g, int s){
	if (!(g->discovered[s])){
		g->discovered[s]=true;
        printf("%d", s);
		edgenode* curr = g->edges[s];
		while(curr !=NULL){
			pp_rec(g,curr->y.val);
			curr=curr->next;
		}
	}
}

void affiche_parcours (graph* g){
	for (int i=0;i<g->nbvertices;i++){
		pp_rec(g,i);
	}
}
		
	
/*void main(){
    graph g;
    initialize_graph(&g);
    FILE* f = fopen("exemple.txt","r");
    read_graph(f,&g);
    initialize_search(&g);
    affiche_parcours(&g);

}*/