00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "graphes.h"
00011
00012
00013 ListeAdj cons(int p, int b, const ListeAdj L) {
00014 ListeAdj l = malloc(sizeof(struct __arc)) ;
00015 l->poids = p ;
00016 l->but = b ;
00017 l->suivant = L ;
00018 return(l) ;
00019 }
00020
00021
00022 GrapheListe grapheListeVide (int n) {
00023 int i;
00024 GrapheListe G = malloc(sizeof(struct __GrapheListe));
00025 G->nb_sommets = n ;
00026 G->Adj = malloc(n*sizeof(ListeAdj*)) ;
00027 for(i=0;i<n;i++) G->Adj[i]=NILL;
00028 return(G) ;
00029 }
00030
00031
00032 GrapheMatr grapheMatrVide (int n) {
00033 GrapheMatr G=malloc(sizeof(struct __GrapheMatr)) ; int i ;
00034 G->nb_sommets = n ;
00035 G->Matr = malloc(n*sizeof(int*)) ;
00036 for(i=0;i<n;i++) G->Matr[i] = malloc(n*sizeof(int)) ;
00037 return(G) ;
00038 }
00039
00040
00041 GrapheListe lireGrapheListe(const char *fichier) {
00042 FILE *flot;
00043 GrapheListe G ;
00044 int n,b,p,s ;
00045 if ((flot = fopen(fichier, "r")) == NULL) {
00046 fprintf(stderr,"\nErreur: impossible d'ouvrir le fichier %s\n", fichier);
00047 return(NULL);
00048 }
00049 if (!fscanf(flot, "%i", &n)) {
00050 fprintf(stderr,"\nErreur: je n'arrive pas à lire les nombre de sommets dans %s\n", fichier);
00051 return(NULL);
00052 }
00053 G = grapheListeVide(n) ;
00054 while (fscanf(flot, "%i %i %i", &s, &p, &b) == 3) {
00055 if (p!=0 && s>=0 && s<n && b>=0 && b<n) G->Adj[s] = cons(p,b,G->Adj[s]) ;
00056 }
00057 return(G) ;
00058 }
00059
00060
00061 GrapheListe grapheListeAleatoire(int n, int m, int p, int o) {
00062 struct timeval temps ;
00063 int i, q, a, s, t;
00064 int N=n*n ;
00065 GrapheListe G = grapheListeVide(n) ;
00066 gettimeofday(&temps, NULL) ;
00067 srand(temps.tv_usec) ;
00068 for(i=0;i<m;i++) {
00069 q=1+(int) ((float)p*rand()/(RAND_MAX+1.0));
00070 a=(int) ((float)N*rand()/(RAND_MAX+1.0));
00071 s = a%n ;
00072 t = a/n ;
00073 G->Adj[t] = cons(q,s,G->Adj[t]) ;
00074 if (o==0) G->Adj[s] = cons(q,t,G->Adj[s]);
00075 }
00076 return(G) ;
00077 }
00078