2
私はCには新しく、0と文字が通過点で1が障壁である迷路問題を実行しようとしています。C再帰セグメント分割エラー
私の2D迷路の配列は始点が(0,4)にあり、毎回4方向(N、S、E、W)をチェックする必要があり、パス配列も含まれていますIは経路探索のために、以下である総使用3機能に再帰溶液を使用してい
1111S11110
0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110
:私はまた、同じサイズである「R」としてルートを置く文字としての「0」)
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とセグメント化で終了します私がデバッグしたとき、問題はrecursiveMaze()
に現れます。
最初のif文からは実行されず、もう一つの問題は南北の制御点の間に戻ってきます。何時間もエラーを見つけることができませんでした。
ありがとうございます。ここで
-gでコンパイルし、gdbで実行します(linuxでのasumming)。これは少なくとも失敗した線を表示します – pm100
"西"が間違っています。それは厳密にy軸を調整する必要があります。 xではない。 'x-1、y-1'は効果的に対角線移動です。それにかかわらず、あなたの行列を構築するコードを組み込みます。事実上、あなたの問題を示す**完全な**例です。配列をロードするコードをボルケーグして、明らかに使用している4つのグローバル変数を準備すると、このコードを読むのは無意味です。 – WhozCraig
あなたは本当に最後のリターンを必要としていますか?0。おそらく1を返すことができますか? (何も起こりませんので、すべてが良いですか?) – Grantly