2016-11-30 7 views
0

これは、3次元配列として表現された3次元迷路の出口を見つけるために使用されるクラスのメソッドです。配列自体には、長さが6の文字列が1または0の文字列で含まれています。文字列の '1'は、その方向に移動できることを意味します。たとえば、現在の配列要素の文字列が100001の場合は、北に移動でき、レベルを下に移動することもできます。ビット列は、北東南西方向の下方向に対応します。このメソッドは現在未完成であるため、実行可能な解決策が見つからないことがわかっていますが、最後にswitchステートメントを実行すると、実行時に配列外のエラーが発生します。私は3次元配列を3次元キューブとして描いています。最も外側の配列は垂直軸を表し、中央の配列はページのz軸を表し、内側の配列は水平のx軸を表します。迷路の現在のセルでは、文字列の各ビットを調べます。可能な移動ごとに、その移動をqに追加します。文字列を見ると、キューに最初に追加された方向に移動し、繰り返します。どんな助けでも大歓迎です。 current.levelcurrent.rowcurrent.colと同様minLevelmaxLevelの間にある場合mazeGraph[current.level][current.row][current.col]にアクセスする前に確認する必要があり、デバッグに配列外のランタイムエラーの原因は何ですか?

void maze::solve(int startlevel, int startrow, int startcol, int endlevel, int endrow, int endcol) 
{ 
position current, exit; 
current.level = startlevel; 
current.row = startrow; 
current.col = startcol; 

exit.level = endlevel; 
exit.row = endrow; 
exit.col = endcol; 

q.push('0'); 
while (!q.empty()) 
{ 
    if (current == exit) 
    { 
     cout << "exit found" << endl; 
     return; 
    } 

    if (mazeGraph[current.level][current.row][current.col].at(0) == '1') 
     q.push('n'); 
    if (mazeGraph[current.level][current.row][current.col].at(1) == '1') 
     q.push('e'); 
    if (mazeGraph[current.level][current.row][current.col].at(2) == '1') 
     q.push('s'); 
    if (mazeGraph[current.level][current.row][current.col].at(3) == '1') 
     q.push('w'); 
    if (mazeGraph[current.level][current.row][current.col].at(4) == '1') 
     q.push('u'); 
    if (mazeGraph[current.level][current.row][current.col].at(5) == '1') 
     q.push('d'); 

    if (q.front() == '0') 
     q.pop(); 

    switch (q.front()) 
    { 
    case 'n': 
     current.row -= 1; 
    case 'e': 
     current.col += 1; 
    case 's': 
     current.row += 1; 
    case 'w': 
     current.col -= 1; 
    case 'u': 
     current.level += 1; 
    case 'd': 
     current.level -= 1; 

    } 

} 
return; 
} 

答えて

1

は、すべてのmazeGraphの範囲です。彼らはcurrent.levelとメッセージを印刷していない場合は、そのエラーを投げる理由を知っているでしょう。

私はまた、あなたのmazeGraphは、開始と終了のレベルで満足境界など

がPSことを持っているように初期化されると仮定しています:マトリックス内の2つのノード間のより良い経路探索のために、*(スター)アルゴリズムがに発見されました多くの場合、より良い解決策になります。私は、 "範囲外の 「<<あれば(current.level <0 || current.level> = this.numlevels) \t \t { \t \t \t裁判所未満" <<てendlを使用して、そうしようとしています

+0

; \t \t} " コンパイラは、" this "にはクラス型 – Flower

関連する問題