00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "labyrinthes.h"
00012 #include <stdlib.h>
00013
00014
00015 Tile tileVide() {
00016 Tile T = malloc(sizeof(struct __Tile)) ;
00017 T->premier = NULL ;
00018 T->dernier = NULL ;
00019 return(T) ;
00020 }
00021
00022 void entile(int o, int p, int b, Tile T) {
00023
00024 struct __case *N = malloc(sizeof(struct __case)) ;
00025 N->origine = o ;
00026 N->poids = p ;
00027 N->but = b ;
00028 N->precedent = NULL ;
00029 N->suivant = T->premier ;
00030
00031 if (T->dernier == NULL) { T->dernier = N ;}
00032 else { T->premier->precedent = N ;}
00033
00034 T->premier = N ;
00035 }
00036
00037
00038 void detilePremier(Tile T, int *o, int *p, int *b) {
00039 if (o!=NULL) *o = T->premier->origine ;
00040 if (p!=NULL) *p = T->premier->poids ;
00041 if (b!=NULL) *b = T->premier->but ;
00042
00043 if (T->premier == T->dernier) {
00044 free(T->premier) ;
00045 T->premier = NULL ;
00046 T->dernier = NULL ;
00047 }
00048 else {
00049 T->premier = T->premier->suivant ;
00050 free(T->premier->precedent) ;
00051 T->premier->precedent = NULL ;
00052 }
00053 }
00054
00055 void detileDernier(Tile T, int *o, int *p, int *b) {
00056 if (o!=NULL) *o = T->dernier->origine ;
00057 if (p!=NULL) *p = T->dernier->poids ;
00058 if (b!=NULL) *b = T->dernier->but ;
00059
00060 if (T->premier == T->dernier) {
00061 free(T->premier) ;
00062 T->premier = NULL ;
00063 T->dernier = NULL ;
00064 }
00065 else {
00066 T->dernier= T->dernier->precedent ;
00067 free(T->dernier->suivant) ;
00068 T->dernier->suivant = NULL ;
00069 }
00070 }
00071
00072 void afficheTile(Tile T) {
00073 Tile L = T ;
00074 int o,p,b ;
00075 printf("afficheTile\n ") ;
00076 while(L->premier!=NULL) {
00077 detilePremier(L,&o,&p,&b) ;
00078 printf("(%i,%i,%i) -- ",o,p,b) ;
00079 }
00080 printf("\n") ;
00081 }
00082
00083
00084
00085 static void insere(int p, int x, ListeAdj *l) {
00086 int q,y ;
00087 ListeAdj ll = *l;
00088 if (ll==NULL) { ll = cons(p,x,ll) ; }
00089 else {
00090 q = ll->poids ;
00091 y = ll->but ;
00092 if (p<q) { ll = cons(p,x,ll) ; }
00093 else {
00094 ll = ll->suivant ;
00095 insere(p,x,&ll) ;
00096 ll = cons(q,y,ll) ;
00097 }
00098 }
00099 *l = ll ;
00100 }
00101
00102
00103 GrapheListe grillePleine(void) {
00104
00105 int h,l,s,p ;
00106 GrapheListe G = grapheListeVide(LARGEUR*HAUTEUR) ;
00107
00108 struct timeval temps ;
00109 gettimeofday(&temps, NULL) ;
00110 srand(temps.tv_usec) ;
00111
00112 for (h=0;h<HAUTEUR;h++)
00113 for (l=0;l<LARGEUR;l++) {
00114 s=l+h*LARGEUR ;
00115 if (h!=0) {
00116 p=rand() ;
00117 insere(p,s-LARGEUR,&(G->Adj[s])) ;
00118 insere(p,s,&(G->Adj[s-LARGEUR])) ;
00119 }
00120 if (l!=0) {
00121 p=rand() ;
00122 insere(p,s-1,&(G->Adj[s])) ;
00123 insere(p,s,&(G->Adj[s-1])) ;
00124 }
00125 }
00126 return(G) ;
00127 }
00128