質問

何らかの方法でスタックのリンクリスト実装を使用して、迷路のソリューションを生成することです。迷路は.txtファイルから読み込まれ、オープンスペースの場合は0、壁には1で構成されています。 enter image description here< - 出口は一番下の行にある必要がありますか?それで、これらの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

私がそれを試みてきた方法は、配列インデックス内で実行される++操作に依存していました。私はアレイsubscriptオペレーターに気付いていませんでした[++よりも優先されたので、今度は回避を再考する必要があります。そうする前に、この方法が最初に機能することを確認したいと思います。誰もがこれまでの私のアルゴコードを見て、フィードバックを提供できますか? (注:何らかのタイプの無限ループを避けるために、撮影されたパスを追跡するためにいくつかのコードを追加する必要があります)

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;
            }
        }

実行の問題[++の前:enter image description here

助けてくれてありがとう、ありがとう!

役に立ちましたか?

解決

アルゴリズムは、円形のパスを持つ特定の迷路では機能しません。これらのいずれかに入ると、輪になります。これを修正するには、[R] [C] [dir]にアクセスしたブールアレイを追加する必要があります。ここで、dirは方向を表すゼロから3までの数です。セル[r] [c]を方向[d]に残すと、[r] [c] [d]をtrueに訪問します。次回同じセルにアクセスするときは、以前に同じ方向に残したかどうかを確認してください。もしそうなら、その方向をスキップして、次の次の方向に進みます。

他のヒント

++-- 実際に行 / col変数を変更します。やりたいと思います maze[row - 1][col] == 0 そして、移動したら、列の位置を更新します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top