何らかの方法でスタックの連結リスト実装を使用して、迷路の解を生成する予定です。迷路は .txt ファイルから読み込まれ、オープン スペースの 0 と壁の 1 で構成されます。
<- 出口は一番下の行にあるはずですか? それで、それらの 3 つの 0 は?
私が使用しようとしているアルゴリズムは次のとおりです。
While Not At End
If Can Go North
Go North
ElseIf Can Go East
Go East
ElseIf Can Go South
Go South
ElseIf Can Go West
Go West
EndIf
Wend
私が試みてきた方法は、配列インデックス内で実行される ++ 操作に依存していました。配列添字演算子 [ が ++ よりも優先されることを知らなかったので、回避策を再考する必要があります。そうする前に、この方法が最初から機能することを確認したいと思います。これまでの私のアルゴ コードを見て、フィードバックを提供してくれる人はいますか? (注: 何らかの種類の無限ループを回避するために取られたパスを追跡するために、いくつかのコードを追加する必要があります)
bool notSolved = true;
int path = 0;
row = 0;
col = 0;
rowStack.push(row);
colStack.push(col);
while (notSolved){
//(from perspective of person looking at maze on screen)
if (maze[row--][col] == 0){//if you can go up, go up
rowStack.push(row);
colStack.push(col);
path++;
}
else if (maze[row][col++] == 0){//else if you can go right, go right
rowStack.push(row);
colStack.push(col);
path++;
}
else if (maze[row++][col] == 0){//else if you can go down, go down
rowStack.push(row);
colStack.push(col);
path++;
}
else if (maze[row][col--] == 0){//else if you can go left, go left
rowStack.push(row);
colStack.push(col);
path++;
}
if((maze[row][col] == 0) && (row == (size - 1))){//if we reached an exit
cout << "Solution Path:" << endl;
for (int i = 0; i < path; i++){
cout << "row:" << rowStack.top() << " col:" << colStack.top() << endl;
rowStack.pop();
colStack.pop();
}
notSolved = false;
}
}
++ の前に [ を実行する際の問題:
どんな助けでも感謝します、ありがとう!