Posez votre question Signaler

Le labyrinthe

carau - Dernière réponse le 27 déc. 2006 à 16:23
bonjour tt le monde
j'ai un probleme de programmation pour trouver la sortie dans labyrinthe
en fait le labyrinthe est un tableau de deux dimensions contenant 0 et 1
0 signifie le couloir par contre 1 le mur
par xemple
011111111111
100111100011
110110011001
111000110101
101011010111
101101000001
111111111110
ce qui'est compliqué c'est que si on veut se deplacer on peut choisir n'importe sens par exemple haut ou haut droit ...........
ce qui fait 8 possibilité
le programme doit etre fait en c
Lire la suite 

Le labyrinthe »

4 réponses
Réponse
+1
moins plus
Salut,

pour trouver la sortie d'un labyrinthe, il existe la méthode de la "main gauche" (ou la main droite)...

Dessine ton labyrinthe sur une feuille de papier et imagine que tu es dedans, mets ta main gauche sur le mur et déplace-toi en gardant la main sur le mur, tu verras que tu finiras par en sortir...

Ca n'est pas académique, mais ça marche à tous les coups (sauf si tu démarres au milieu d'un labyrinthe qui contient des îlots, c'est-à-dire des zones non reliées au reste par des murs...).

En algo, il te suffit de chercher le couloir le plus à gauche dans le sens des aiguilles d'une montre...
Ajouter un commentaire
Réponse
+0
moins plus
Hello,
Et ou est le probleme ?
Ajouter un commentaire
Réponse
+0
moins plus
merci pour tes conseils mais cette methode ne marche que pour quatre direction
ansi j'ai fait un programme en c mais j'ai pas reussi a me deplacer (en echangeant la valeur de chaque case parcouru de 0->2)
je voulaisse mon prog <code>
#include<stdio.h>
#define H 8
#define B 4
#define D 1
#define G 6
#define HD 1
#define HG 7
#define BD 3
#define BG 5

struct matrice{
int nlig;
int ncol;
char ** donnees;
};

int Test_Voisine_Libre();

int Test_Voisine_Libre(){
struct matrice m;
int i;int j; int dir;
m.donnees[i][j];
int k;
if(m.donnees[i-1][j-1]=0){
return 7;
}
else{
return k;
}
if(m.donnees[i-1][j]=0){
return 8;
}
else {
return k;
}
if(m.donnees[i-1][j+1]=0){
return 1;
}
else{
return k;
}
if(m.donnees[i][j-1]=0){
return 6;
}
else {return k;
}
if(m.donnees[i][j+1]=0){
return 2;}

else {return k;
}
if(m.donnees[i+1][j-1]=0){
return 5;
}
else {
return k;
}
if(m.donnees[i+1][j]=0){
return 4;


}
if(m.donnees[i+1][j+1]=0){
return 3;}
else {
return k;
}
}



int chois_voisine(struct matrice m,int i,int j);

int chois_voisine(struct matrice m,int i,int j){
int dir;
m.donnees [i][j];
int l;
for(l=1;l<9;l++){
if(l=Test_Voisine_Libre()){
break;
dir=l;}
else {printf("erreur de parcour");
}
}
return dir;
}




void avance(int dir,int i,int j,struct matrice m){

if ( dir == H )
{
i --;
}
if(dir==D)
{
j++;
}
if(dir==HD)
{
i --,j++;
}
if(dir==HG)
{
i--,j--;
}
if(dir==B)
{
i++;
}
if(dir==G)
{
j--;
}
if(dir==BG)
{
i++,j--;
}
if(dir==BD)
{
i++,j++;
}
}

/* fonction echange permet d'echanger les valeurs des cases parcouru*/
int echange(strct matrice m){
m.donnees[i][j];
for(c=0;c<m.nlig*m.col;i++) {
tab[c] = c;
}
Ajouter un commentaire
Réponse
+0
moins plus
Ma méthode marche à tous les coups, c'est à toi de prévoir dans ton algo la possibilité de te déplacer sur 8 directions... Une matrice de 3x3 dans laquelle tu es au centre, avec mémoire de ton sens de déplacement...
Ajouter un commentaire
Ce document intitulé « le labyrinthe » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook