Bonjour, je suis étudiant en 1 ère année dans une école d'informatique et j'ai un projet à rendre pour bientôt dans lequel je bloque complètement, il s'agit du BSQ..
Ce projet consiste a trouver, dans une map donnée : exemple :
.....o..
.o......
.o...o.o
.o......
.....o..
.oo...o.
.o.o....
..o.....
Le plus grand CARRE dans cette map et le remplacer par des X comme ceci :
.....o..
.oXXX...
.oXXXo.o
.oXXX...
.....o..
.oo...o.
.o.o....
..o.....
Alors voila j'ai récupérer la map dans un buffer puis ensuite je l'ai stocké dans un tableau à 2 dimensions pour facilité la recherche. Mais l'algorithme de recherche je ne le comprend pas, du moins je ne vois pas du tout comment le coder si ce n'est avec 5678 variables peut être et encore ... J'ai vu qu'il y avait une méthode qui consistait à partit d'un point qui serait le coté haut/gauche de mon carré et ensuite de descendre et étendre par la droite mais je ne vois pas comment je peux crée ça avec les while et les if, vraiment pas...
( ah oui je précise que j'ai stocké dans un tableau de int à double entrée mais cela ne change pas grand chose de toute manière..
Voila mon ébauche de code et je suis donc dans la fonction algo qui doit crée la recherche ... =>
En espérant une aide, merci et bonne journée..
Le stockage du buffer dans le tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 int bsq(char *filepath, int my_size) { int fd; char *str; char buffer[my_size]; int r; int cpt; int column; int lane; str = malloc(my_size * sizeof(char)); fd = fs_open_file(filepath); while ((r = read(fd, buffer, my_size)) > 0) { column = cpt_column(buffer, cpt, column); lane = cpt_lane(buffer, cpt, lane); if (r != 0) { buffer[r] = 0; my_strcat(str, buffer); } } buff_in_int(buffer, column, lane); /* printf("%c", '\n'); */ /* printf("%c", '\n'); */ /* printf("%c", '\n'); */ printf("%s", str); close(fd); return (0);
Mon compteur de ligne et de colonne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void buff_in_int(char *buffer, int column, int lane) { int tab_int[lane][column]; int cpt; int a; int b; int dim; a = 0; b = 0; cpt = 0; dim = 0; while (buffer[a] != '\n') // je met a la 2eme ligne a = a + 1; a = a + 1; while (b != lane - 1) // on crée notre tableau de int { while (cpt != column) { if (buffer[a] == '.') tab_int[b][cpt] = 0; else if (buffer[a] == 'o') tab_int[b][cpt] = 1; a = a + 1; cpt = cpt + 1; } a = a + 1; cpt = 0; b = b + 1; } algo(column, lane, tab_int); }
Puis l'algo ... :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 int cpt_lane(char *buffer, int cpt, int lane) { lane = 0; cpt = 0; while (buffer[cpt] != '\0') { if (buffer[cpt - 1] == '\n') lane = lane + 1; cpt = cpt + 1; } return (lane); } int cpt_column(char *buffer, int cpt, int column) { cpt = 0; column = 0; while (buffer[cpt] != '\n') cpt = cpt + 1; while (buffer[cpt + 1] != '\n') { column = column + 1; cpt = cpt + 1; } return (column); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 int algo(int column, int lane, int tab_int[lane][column]) { int cpt; int cpt2; int cpt3; int a; a = 0; cpt = 0; cpt2 = - 1; cpt3 = 0; while (cpt < column) { if (tab[a][cpt] == 0) { } cpt = cpt + 1; } }
Partager