Lua(trAInsported):Wavefrontアルゴリズムを実装しようとしていますが、機能しません

Cpt。クレイジー

波面アルゴリズムを実装しようとしていますが、特定の勾配でマップを生成する関数に問題があります。

以下のコードのいくつかの異なるバージョンを試しましたが、どれも機能しませんでした。

アルゴリズムの開始点(目標)は1に設定され、勾配がまだビン変更されていない場合は、各ネイバーの勾配のその点から増加する必要があります(すべての波面アルゴリズムと同様)。

originXそしてoriginYそれは、アロリズムが始まるべき目標です。mapMatrixグローバル変数です

mapMatrix このように見えます:

0 0 0 0 0 0 0
0 0 N 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 N 0 0 N 0 N
N N 0 0 N 0 0 
0 0 0 0 0 0 0

(レールの場合は0、障害物の場合はN(nil))

期待される出力例:

7 6 5 4 3 4 5
6 5 N 3 2 3 4
5 4 3 2 1 2 3
6 5 4 3 2 3 3
7 N 5 4 N 4 N
N N 6 5 N 5 6 
9 8 7 6 7 6 7

そして、例えばこのコードで:

function pathFinder(originX, originY)
    northDir = originY - 1
    eastDir = originX + 1
    southDir = originY + 1
    westDir = originX - 1

    if northDir > 0 and mapMatrix[originX][northDir] == 0 then 
        mapMatrix[originX][northDir] = mapMatrix[originX][originY] + 1
        pathFinder(originX, northDir)

    end
    if eastDir <= 7 and mapMatrix[eastDir][originY] == 0 then 
        mapMatrix[eastDir][originY] = mapMatrix[originX][originY] + 1
        pathFinder(eastDir, originY)

    end
    if southDir <= 7 and mapMatrix[originX][southDir] == 0 then 
        mapMatrix[originX][southDir] = mapMatrix[originX][originY] + 1
        pathFinder(originX, southDir)

    end
    if westDir > 0 and mapMatrix[westDir][originY] == 0 then 
        mapMatrix[westDir][originY] = mapMatrix[originX][originY] + 1
        pathFinder(westDir, originY)
    end
end

私はこれを手に入れますmapMatrix

0 0 0 0 3 4 5
0 0 N 0 2 10 6
0 0 0 0 1 9 7
0 0 0 0 0 0 8
0 N 0 0 N 0 N
N N 0 0 N 0 0 
0 0 0 0 0 0 0

そして、周りのifステートメントを切り替えると、異なるバージョンの mapMatrix

northDirなどを作成した後local、出力は次のようになります。編集

33 24 23 22 3 4 5
32 25 N 21 2 11 6
31 26 27 20 1 10 7
30 29 28 19 20 9 8
31 N 29 18 N 10 N
N N 30 17 N 11 12
33 32 31 16 15 14 13

さらにコードや情報が必要な場合は、喜んでお手伝いさせていただきます

ニーナ・リシチンスカヤ

あなたのコードはまったく間違っています。pathFinder最初のチェックで再帰的に呼び出され、それはただの障害物が表示されるまで、その方向に行くと、次の方向に行くよりも、というようになります。


BFSは実際には非常に単純なアルゴリズムです。次のように、再帰なしでキューに繰り返し簡単に実装できます。

  1. 初期ノードをキューに入れます。
  2. キューから最初のノードをポップして処理します。
  3. 未処理の隣接ノードをキューの最後にプッシュします。
  4. キューが空でない場合は、手順2に進みます。

長方形マトリックス上のLuaでは、約2〜3ダースの行で実装できます。

function gradient(matrix, originX, originY)
    -- Create queue and put origin position and initial value to it.
    local queue = { { originX, originY, 1 } }

    repeat
        -- Pop first position and value from the queue.
        local x, y, value = unpack(table.remove(queue, 1))

        -- Mark this position in the matrix.
        matrix[y][x] = value

        -- Check position to the top.
        if y > 1 and matrix[y - 1][x] == 0 then
            -- If it is not already processed, push it to the queue.
            table.insert(queue, { x, y - 1, value + 1 })
        end

        -- Check position on the left.
        if x > 1 and matrix[y][x - 1] == 0 then
            table.insert(queue, { x - 1, y, value + 1 })
        end

        -- Check position to the bottom.
        if y < #matrix and matrix[y + 1][x] == 0 then
            table.insert(queue, { x, y + 1, value + 1 })
        end

        -- Check position on the right.
        if x < #matrix[y] and matrix[y][x + 1] == 0 then
            table.insert(queue, { x + 1, y, value + 1 })
        end

    -- Repeat, until queue is not empty.
    until #queue == 0
end

-- Just helper function to print a matrix.
function printMatrix(matrix)
    for _, row in pairs(matrix) do
        for _, value in pairs(row) do
            io.write(string.format("%2s", value))
        end
        io.write('\n')
    end
end

local mapMatrix = {
    {   0,   0,   0, 0,   0, 0,   0, },
    {   0,   0, 'N', 0,   0, 0,   0, },
    {   0,   0,   0, 0,   0, 0,   0, },
    {   0,   0,   0, 0,   0, 0,   0, },
    {   0, 'N',   0, 0, 'N', 0, 'N', },
    { 'N', 'N',   0, 0, 'N', 0,   0, },
    {   0,   0,   0, 0,   0, 0,   0, },
}

gradient(mapMatrix, 5, 3)
printMatrix(mapMatrix)

--[[
Produces:
 7 6 5 4 3 4 5
 6 5 N 3 2 3 4
 5 4 3 2 1 2 3
 6 5 4 3 2 3 4
 7 N 5 4 N 4 N
 N N 6 5 N 5 6
 9 8 7 6 7 6 7
]]

これは完全なスクリプトであり、コンソールで実行できます。


ただし、説明のために、このコードは非常に単純ですが、あまり効率的ではありません。キューから最初のアイテムを削除するたびに、残りのアイテムのインデックスが再作成されます。本番コードの場合、キューにリンクリストなどを実装する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

数値のすべての桁を二乗しようとしていますが、私のアルゴリズムが機能していませんか?

分類Dev

BFSおよびUCSアルゴリズム。私のBFS実装は機能しますが、UCSは機能しません。理由がわからない

分類Dev

CでLuhnのアルゴリズムを実装しようとしています

分類Dev

JSでisRepdigit()アルゴリズムを実装しようとしています

分類Dev

C ++のベクトルを使用して(Introduction to Algorithms(CLRS))からマージソートアルゴリズムを実装しようとしていますが、配列がソートされていません。

分類Dev

Luaでオブジェクト指向プログラミングを実装しようとしていますが、うまく機能していません

分類Dev

二分探索アルゴリズムが機能していません

分類Dev

アルゴリズムpygameを終了します正しく機能していません

分類Dev

Todolist を実行しようとしていますが、機能しません。

分類Dev

TensorFlowJでのDQNアルゴリズムのこの実装はどのように機能しますか?

分類Dev

配列を使用して再帰的なハノイの塔アルゴリズムを実装しようとしています

分類Dev

Python税計算機-アルゴリズムが正しく機能していません

分類Dev

操車場アルゴリズムを理解しようとしています

分類Dev

AngularUi-ルーター-その他| スティッキー状態を実装しようとしていますが、機能していません

分類Dev

Twitchボットの見積もりシステムをmIRCに実装しようとしていますが、テキストファイルからの読み取りは機能しますが、追加しても機能しません。

分類Dev

私の幅優先アルゴリズムが正しく機能していません

分類Dev

マージソートアルゴリズムが正しく機能していません

分類Dev

JavaのSetはUnionFindアルゴリズムを実装していますか?

分類Dev

アルゴリズムが何をするのか理解しようとしています

分類Dev

私はBFSアルゴリズムを実行しようとしていますが、それは私を捨てます

分類Dev

NotificationChannelとWorkManagerを実装しようとしていますが、どういうわけか機能せず、何も間違って表示されません

分類Dev

文字列/文の最も近い一致アルゴリズムが機能していませんか?

分類Dev

Pythonを使用してクイックソートを実装しようとしていますが、機能していません

分類Dev

DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

分類Dev

DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

分類Dev

マークルツリーの整合性証明を実装しようとしていますが、アルゴリズムの理解に固執しています

分類Dev

CalenderViewが存在しません-DatePickerDialogを実装しようとしています

分類Dev

分綴アルゴリズムを実装していますが、本当に遅いです

分類Dev

カラー フェージング アルゴリズムが機能していませんか?

Related 関連記事

  1. 1

    数値のすべての桁を二乗しようとしていますが、私のアルゴリズムが機能していませんか?

  2. 2

    BFSおよびUCSアルゴリズム。私のBFS実装は機能しますが、UCSは機能しません。理由がわからない

  3. 3

    CでLuhnのアルゴリズムを実装しようとしています

  4. 4

    JSでisRepdigit()アルゴリズムを実装しようとしています

  5. 5

    C ++のベクトルを使用して(Introduction to Algorithms(CLRS))からマージソートアルゴリズムを実装しようとしていますが、配列がソートされていません。

  6. 6

    Luaでオブジェクト指向プログラミングを実装しようとしていますが、うまく機能していません

  7. 7

    二分探索アルゴリズムが機能していません

  8. 8

    アルゴリズムpygameを終了します正しく機能していません

  9. 9

    Todolist を実行しようとしていますが、機能しません。

  10. 10

    TensorFlowJでのDQNアルゴリズムのこの実装はどのように機能しますか?

  11. 11

    配列を使用して再帰的なハノイの塔アルゴリズムを実装しようとしています

  12. 12

    Python税計算機-アルゴリズムが正しく機能していません

  13. 13

    操車場アルゴリズムを理解しようとしています

  14. 14

    AngularUi-ルーター-その他| スティッキー状態を実装しようとしていますが、機能していません

  15. 15

    Twitchボットの見積もりシステムをmIRCに実装しようとしていますが、テキストファイルからの読み取りは機能しますが、追加しても機能しません。

  16. 16

    私の幅優先アルゴリズムが正しく機能していません

  17. 17

    マージソートアルゴリズムが正しく機能していません

  18. 18

    JavaのSetはUnionFindアルゴリズムを実装していますか?

  19. 19

    アルゴリズムが何をするのか理解しようとしています

  20. 20

    私はBFSアルゴリズムを実行しようとしていますが、それは私を捨てます

  21. 21

    NotificationChannelとWorkManagerを実装しようとしていますが、どういうわけか機能せず、何も間違って表示されません

  22. 22

    文字列/文の最も近い一致アルゴリズムが機能していませんか?

  23. 23

    Pythonを使用してクイックソートを実装しようとしていますが、機能していません

  24. 24

    DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

  25. 25

    DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

  26. 26

    マークルツリーの整合性証明を実装しようとしていますが、アルゴリズムの理解に固執しています

  27. 27

    CalenderViewが存在しません-DatePickerDialogを実装しようとしています

  28. 28

    分綴アルゴリズムを実装していますが、本当に遅いです

  29. 29

    カラー フェージング アルゴリズムが機能していませんか?

ホットタグ

アーカイブ