Le labyrinthe

carau -  
blux Messages postés 19334 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

4 réponses

blux Messages postés 19334 Date d'inscription   Statut Modérateur Dernière intervention   3 367
 
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...
1
oberion Messages postés 1255 Statut Membre 249
 
Hello,
Et ou est le probleme ?
0
carau
 
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;
}
0
blux Messages postés 19334 Date d'inscription   Statut Modérateur Dernière intervention   3 367
 
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...
0