2
我是C新手,試圖做一個迷宮問題,其中0和字母是通過點,1是障礙。我的2D迷宮數組低於起點在(0,4),每次我必須檢查4個方向(N,S,E,W),我也有路徑數組(最初包含「0」作爲字符)其中I會把路線爲「R」,這也是相同的大小:C遞歸分段錯誤
1111S11110
0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110
我使用遞歸溶液尋路和在總使用3的函數,它們在下面:
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;
}
當我運行MazeSolution()
時,程序以錯誤代碼255和segmentati結束當我調試問題出現在recursiveMaze()
函數。
因此,從第一條if語句開始,它不會執行,另一個問題是它會返回到南和北控制點之間。請幫助我找不到幾個小時的錯誤。
在此先感謝。
用-g編譯並在gdb下運行(在linux上運行)。這將至少顯示失敗的線路 – pm100
你的「西部」是錯誤的。應嚴格調整y軸;不是x。 'x-1,y-1'實際上是一個對角線移動。無論如何,包括你的代碼,建立你的矩陣;實際上是一個最小的**完整的**示例,可以證明您的問題。如果你使用加載數組的代碼並填充你顯然使用的四個全局變量,那麼閱讀這段代碼是沒有意義的。 – WhozCraig
你確定你需要最後一次返回0 ....可能會返回1嗎? (因爲什麼都沒有發生,所以一切都好?) – Grantly