Commit 6a4f0bf7 authored by Valentin MEUNIER's avatar Valentin MEUNIER
Browse files

dfs fonctionnel sur le laby mais aetoiles toujours etrange

parent 2d5eaef7
......@@ -181,6 +181,7 @@ int * Aetoile_euclidienne(int ** laby, int noeuds, int depart, int arrivee)
tas->taille+=-1;
percolation_bas_tas_min(tas,0,indice_valeur);
sommet=tas->tab[0].val;
tas->tab[0].poids-=distance_euclidienne(tas->tab[0].val,arrivee);
}
free(distance);
......@@ -264,6 +265,7 @@ int * Aetoile_tcheby(int ** laby, int noeuds, int depart,int arrivee)
tas->taille+=-1;
percolation_bas_tas_min(tas,0,indice_valeur);
sommet=tas->tab[0].val;
tas->tab[0].poids-=distance_tcheby(tas->tab[0].val,arrivee);
}
free(distance);
......@@ -347,6 +349,7 @@ int * Aetoile_manhattan(int ** laby, int noeuds, int depart, int arrivee)
tas->taille+=-1;
percolation_bas_tas_min(tas,0,indice_valeur);
sommet=tas->tab[0].val;
tas->tab[0].poids-=distance_manhattan(tas->tab[0].val,arrivee);
}
free(distance);
......@@ -380,32 +383,32 @@ int main (int argc, char** argv)
float temps;
t_depart=clock();
for (int i=0; i<1000; i++)
// for (int i=0; i<1000; i++)
parent=dijsktra(tab,noeuds,arrivee);
t_fin=clock();
temps=-t_depart+t_fin;
printf("temps dijsktra : %f\n",temps/1000);
printf("temps dijsktra : %f\n",temps);
t_depart=clock();
for (int i=0; i<1000; i++)
// for (int i=0; i<1000; i++)
parent=Aetoile_euclidienne(tab,noeuds,depart,arrivee);
t_fin=clock();
temps=-t_depart+t_fin;
printf("temps Aetoile_euclidienne : %f\n",temps/1000);
printf("temps Aetoile_euclidienne : %f\n",temps);
t_depart=clock();
for (int i=0; i<1000; i++)
// for (int i=0; i<1000; i++)
parent=Aetoile_tcheby(tab,noeuds,depart,arrivee);
t_fin=clock();
temps=-t_depart+t_fin;
printf("temps Aetoile_tcheby : %f\n",temps/1000);
printf("temps Aetoile_tcheby : %f\n",temps);
t_depart=clock();
for (int i=0; i<1000; i++)
// for (int i=0; i<1000; i++)
parent=Aetoile_manhattan(tab,noeuds,depart,arrivee);
t_fin=clock();
temps=-t_depart+t_fin;
printf("temps Aetoile_manhattan: %f\n",temps/1000);
printf("temps Aetoile_manhattan: %f\n",temps);
}
......@@ -6,17 +6,17 @@ void explorer(int ** laby,int sommet, int * som, int *explo)
explo[explo[0]]=sommet;
explo[0]+=1;
if (laby[sommet%P][sommet/P] & FLAG_N)
if (som[laby[sommet%P][sommet/P]]!=-1)
explorer(laby,laby[sommet%P][sommet/P],som,explo);
if (som[sommet-P]!=-1)
explorer(laby,sommet-P,som,explo);
if (laby[sommet%P][sommet/P] & FLAG_S)
if (som[laby[sommet%P][sommet/P]]!=-1)
explorer(laby,laby[sommet%P][sommet/P],som,explo);
if (som[sommet+P]!=-1)
explorer(laby,sommet+P,som,explo);
if (laby[sommet%P][sommet/P] & FLAG_O)
if (som[laby[sommet%P][sommet/P]]!=-1)
explorer(laby,laby[sommet%P][sommet/P],som,explo);
if (som[sommet-1]!=-1)
explorer(laby,sommet-1,som,explo);
if (laby[sommet%P][sommet/P] & FLAG_E)
if (som[laby[sommet%P][sommet/P]]!=-1)
explorer(laby,laby[sommet%P][sommet/P],som,explo);
if (som[sommet+1]!=-1)
explorer(laby,sommet+1,som,explo);
}
......@@ -28,6 +28,7 @@ int * DFS(int ** laby,int noeuds)
for (int i =0; i<noeuds; i++)
som[i]=0;
for (int i=0; i<noeuds; i++)
explorer(laby,laby[0][0],som,explo);
if (som[i]!=-1)
explorer(laby,i,som,explo);
return explo;
}
......@@ -4,8 +4,8 @@
#include "tas.h"
#include "graph_aretes_tab.h"
#define N 13
#define P 15
#define N 53
#define P 55
graph_t * kruskal(graph_t * graph,int noeuds, int nb_aretes,int * cours,double p);
......
......@@ -61,6 +61,26 @@ void afficherEcranIntelligemment(SDL_Renderer *renderer,int **tab,int taille_cel
}
}
void peindreDFS(SDL_Renderer * renderer, int noeuds, int taille_cell)
{
SDL_DisplayMode screen;
SDL_GetCurrentDisplayMode(0,&screen);
int decalage_horizontale=(screen.w/taille_cell-P)*taille_cell/3;
int decalage_vertical=(screen.h/taille_cell-N)*taille_cell/4;
SDL_Rect rectangle;
int x=noeuds%P;
int y=noeuds/P;
SDL_SetRenderDrawColor(renderer, 0,255,0,0);
rectangle.x=taille_cell*x+ decalage_horizontale;
rectangle.y=taille_cell*y+ decalage_vertical;
rectangle.h=rectangle.w=taille_cell;
SDL_RenderFillRect(renderer, &rectangle);
}
void chemin(SDL_Renderer * renderer, int depart, int arrivee, int taille_cell,int *parent)
{
SDL_DisplayMode screen;
......@@ -68,13 +88,22 @@ void chemin(SDL_Renderer * renderer, int depart, int arrivee, int taille_cell,in
int decalage_horizontale=(screen.w/taille_cell-P)*taille_cell/3;
int decalage_vertical=(screen.h/taille_cell-N)*taille_cell/4;
SDL_Rect rectangle;
int cours=depart;
SDL_SetRenderDrawColor(renderer, 0,255,0,0);
rectangle.x=taille_cell*(cours%P)+decalage_horizontale;
rectangle.y=taille_cell*(cours/P)+decalage_vertical;
rectangle.w=rectangle.h=taille_cell;
SDL_RenderFillRect(renderer, &rectangle);
cours=parent[cours];
cours=arrivee;
SDL_SetRenderDrawColor(renderer, 0,0,255,0);
rectangle.x=taille_cell*(cours%P)+decalage_horizontale;
rectangle.y=taille_cell*(cours/P)+decalage_vertical;
rectangle.w=rectangle.h=taille_cell;
SDL_RenderFillRect(renderer, &rectangle);
cours=parent[depart];
SDL_SetRenderDrawColor(renderer, 255,0,0,0);
while(cours!=arrivee)
{
......@@ -83,6 +112,8 @@ void chemin(SDL_Renderer * renderer, int depart, int arrivee, int taille_cell,in
rectangle.w=rectangle.h=taille_cell;
SDL_RenderFillRect(renderer, &rectangle);
cours=parent[cours];
SDL_RenderPresent(renderer);
SDL_Delay(20);
}
cours=arrivee;
SDL_SetRenderDrawColor(renderer, 0,0,255,0);
......@@ -131,6 +162,7 @@ int main (int argc, char** argv)
int cours=0;
int depart=0;
int arrivee=12;
int * explo;
int taille_cell=min(screen.w/(P+2),screen.h/(N+2));
//printf("%d \n", taille_cell);
graph_t * graph=creer_graph(noeuds,nb_aretes);
......@@ -138,7 +170,10 @@ int main (int argc, char** argv)
graph=Fisher(graph,nb_aretes);
graph=kruskal(graph,noeuds,nb_aretes,&cours,p);
tab=tableau_ligne(graph,cours);
explo=DFS(tab,noeuds);
int temps=600;
int i=1;
SDL_Event event;
while (running)
{
......@@ -159,8 +194,11 @@ int main (int argc, char** argv)
break;
break;
}
if (temps>600)
}
/*
if (temps>100)
{
temps=0;
SDL_RenderClear(renderer);
afficherEcranIntelligemment(renderer,tab,taille_cell);
......@@ -171,9 +209,21 @@ int main (int argc, char** argv)
}
else
temps+=10;
*/
if (i==1)
afficherEcranIntelligemment(renderer,tab,taille_cell);
if (i<=noeuds)
{
peindreDFS(renderer,explo[i],taille_cell);
i++;
}
else
{
SDL_Delay(8000);
running=0;
}
SDL_RenderPresent(renderer);
SDL_Delay(10);
}
SDL_Delay(20);
}
end_sdl(1, "Normal ending", window, renderer);
return 1;
......
......@@ -7,6 +7,7 @@
#include<SDL2/SDL.h>
#include "kruskal.h"
#include "dijsktra.h"
#include "DFS.h"
#include <math.h>
typedef enum {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment