0
程序必須從索引[0] [1]開始,並在索引[7] [7]時完成迷宮。該程序到達「FindPath」函數時崩潰。我想不出我做錯了什麼,任何信息都有幫助。我需要用C編寫一個程序,遞歸地解決X和空格的迷宮問題
#include "Header.h"
int main(void) {
int x = 0, y = 1;
char maze[8][8] = {
{' ', ' ', 'x', 'x', 'x', 'x', 'x', 'x'},
{' ', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},
{' ', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},
{' ', ' ', ' ', ' ', ' ', 'x', 'x', 'x'},
{'x', 'x', 'x', 'x', ' ', 'x', 'x', 'x'},
{'x', 'x', 'x', 'x', ' ', ' ', ' ', ' '},
{'x', 'x', 'x', 'x', 'x', 'x', 'x', ' '},
{'x', 'x', 'x', 'x', 'x', 'x', 'x', ' '},
};
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
printf("%c ",maze[i][j]);
}
printf("\n");
}
FindPath(maze, x, y);
return 0;
}
#include "Header.h"
void FindPath(char maze[8][8], int x, int y) {
if (x == 7 & y == 7) {
printf("Maze complete");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
printf("%c ", maze[i][j]);
}
printf("\n");
}
return;
}
else {
if (maze[x + 1][y] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x + 1, y);
return;
}
else if (maze[x - 1][y] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x - 1, y);
return;
}
else if (maze[x][y + 1] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x, y + 1);
return;
}
else if (maze[x][y - 1] = ' ') {
maze[x][y] = 'h';
FindPath(maze, x, y - 1);
return;
}
else {
printf("no path found");
return;
}
}
}
'如果(迷宮[X + 1] [Y] ='「)' - 敢肯定你不是故意的在那裏執行**任務**。 == ==運算符用於等價比較。在您的代碼中的其他地方重複。因此,「我做錯了什麼」頂層將不會編寫啓用迂腐警告並在檢查後進行修復。 – WhozCraig
我的猜測是你得到了堆棧溢出。在調試器中瀏覽程序並查看它的進展情況。 – Barmar
@WhozCraig是對的。一種常見的做法是用==的左側的常量編寫條件,以便如果使用=而不是==,則編譯器將捕獲該問題。即如果(''=迷宮[x + 1] [y])' – bruceg