Je suis novice en C et j'essaie de faire un problème de labyrinthe où 0 et les lettres sont des points de passage et 1 est une barrière. Mon tableau de labyrinthe 2D est ci-dessous où le point de départ est à (0,4) et chaque fois que je dois vérifier 4 directions (N, S, E, W), et j'ai aussi le tableau de chemin (contient initialement « 0 » en tant que caractères) où je vais mettre les routes comme « R », qui est également la même taille:C Erreur de segmentation de la récursion
1111S11110
0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110
J'utilise une solution récursif pour pathfinding et de l'utilisation totale de 3 fonctions qui sont ci-dessous:
int isSafe(char Mazearray[matrixSize][matrixSize],int x,int y){
if(x >= 0 && x < matrixSize && y >= 0 && y < matrixSize && Mazearray[x][y] != '1'){
return 1;
}
return 0;
}
void MazeSolution(char Mazearray[matrixSize][matrixSize],int x,int y,char pathArray[matrixSize][matrixSize]){
if(recursiveMaze(Mazearray,x,y,pathArray) == 0){
printf("There does not exist a possible solution!!!");
}
else{
int i,j;
for (i = 0; i < matrixSize; ++i){
for (j = 0; j < matrixSize; ++j){
printf("%c",pathArray[i][j]);
}
printf("\n");
}
}
}
int recursiveMaze(char Mazearray[matrixSize][matrixSize],int x,int y,char pathArray[matrixSize][matrixSize]){
if(x == exitX && y == exitY){
pathArray[x][y] == 'E';
return 1;
}
// check if the coordinate is safe to go(not 1)
if(isSafe(Mazearray,x,y) == 1){
pathArray[x][y] == 'R';
// Move North
if(recursiveMaze(Mazearray,x-1,y,pathArray) == 1){
return 1;
}
// Move South
if(recursiveMaze(Mazearray,x+1,y,pathArray) == 1){
return 1;
}
// Move East
if(recursiveMaze(Mazearray,x,y+1,pathArray) == 1){
return 1;
}
// Move West
if(recursiveMaze(Mazearray,x-1,y-1,pathArray) == 1){
return 1;
}
pathArray[x][y] == '0';
return 0;
}
return 0;
}
Lorsque j'exécute le MazeSolution()
, le programme se termine avec le code d'erreur 255 et segmentati sur défaut.Lorsque j'ai débogué le problème apparaît à recursiveMaze()
fonction. Donc, à partir de la première déclaration if, il ne s'exécute pas et l'autre problème est qu'il va et vient entre les points de contrôle sud et nord. Veuillez m'aider à ne pas trouver l'erreur pendant des heures.
Merci d'avance.
compile avec -g et s'exécute sous gdb (asumming sur linux). Cela montrera au moins la ligne défaillante – pm100
Votre "ouest" est faux. Cela devrait être strictement ajusté sur l'axe des y; pas x. 'x-1, y-1' est effectivement un mouvement diagonal. Indépendamment, incluez votre code qui construit vos matrices; efficacement un exemple minimum ** complet ** qui démontre votre problème. La lecture de ce code est inutile si vous avez écrasé le code qui charge les tableaux et/ou amorce les quatre variables globales que vous utilisez apparemment. – WhozCraig
Etes-vous sûr que vous avez besoin du tout dernier retour 0 .... Pourrait-il être le retour 1 peut-être? (Comme rien ne se passe donc tout est bon?) – Grantly