これは、3次元配列として表現された3次元迷路の出口を見つけるために使用されるクラスのメソッドです。配列自体には、長さが6の文字列が1または0の文字列で含まれています。文字列の '1'は、その方向に移動できることを意味します。たとえば、現在の配列要素の文字列が100001の場合は、北に移動でき、レベルを下に移動することもできます。ビット列は、北東南西方向の下方向に対応します。このメソッドは現在未完成であるため、実行可能な解決策が見つからないことがわかっていますが、最後にswitchステートメントを実行すると、実行時に配列外のエラーが発生します。私は3次元配列を3次元キューブとして描いています。最も外側の配列は垂直軸を表し、中央の配列はページのz軸を表し、内側の配列は水平のx軸を表します。迷路の現在のセルでは、文字列の各ビットを調べます。可能な移動ごとに、その移動をqに追加します。文字列を見ると、キューに最初に追加された方向に移動し、繰り返します。どんな助けでも大歓迎です。 current.level
がcurrent.row
とcurrent.col
と同様minLevel
とmaxLevel
の間にある場合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;
}
; \t \t} " コンパイラは、" this "にはクラス型 – Flower