bfsアルゴリズムを使用して境界点を見つける方法

SamSic

2D配列を座標と考えて、値が1の座標値を見つけようとします。

これまでのところ、これは非常に簡単なBFSの問題ですが、私がやりたいのは次の図を参照することです。

ここに画像の説明を入力してください

1を探している間、またはすべてを見つけた後、矢印または他の方向の順序で境界を囲む座標値を知りたいです。

これらの情報を取得するには、どのようなオプションを追加する必要がありますか?

以下は私が現在使用しているBFSコードです。2番目の図に示すように、BFS関数から座標値を取得できます。

class Node
{
    public int x;
    public int y;

    public Node(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
};

private int[] dx = new int[8] { -1, 0, 1, 0, 1, -1, -1, 1 };
private int[] dy = new int[8] { 0, -1, 0, 1, 1, -1, 1, -1 };

private Queue<Node> q = new Queue<Node>();

bool[,] visit = new bool[15, 15];
int[,] coordinates = new int[15, 15] {  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 },
                                                { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
                                                { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
                                                { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
                                                { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }};



void BFS(int[,] pixel, int x, int y)
{
    q.Enqueue(new Node(x, y));
    visit[x, y] = true;

    while (q.Count != 0)
    {
        Node cur = q.Dequeue();

        for (int i = 0; i < 8; i++)
        {
            int r = cur.x + dx[i];
            int c = cur.y + dy[i];

            if (r >= 0 && c >= 0 && r < 15 && c < 15)
            {
                if (!visit[r, c] && pixel[r, c] == 1)
                {
                    q.Enqueue(new Node(r, c));

                    visit[r, c] = true;
                }
            }
        }
    }
}

void main()
{
    for (int y = 0; y < 15; y++)
    {
        for (int x = 0; x < 15; x++)
        {
            if (!visit[x, y] && coordinates[x, y] == 1)
            {
                BFS(coordinates, x, y);
            }
        }
    }

}
BishalG

境界 ' 1'値を見つけるためにBFSは必要ありません2Dグリッドをループするだけで、 ' 1'ごとに、隣接する4つの(i.e up, down, left, right)すべてが' 'であるかどうかを確認できます1それらの少なくとも1つが ' 1'でない場合、それは境界点です。ありがとう!

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

bfsアルゴリズムを使用して境界点を見つける方法

分類Dev

ダイクストラのアルゴリズムを使用して、頂点制約のある最短経路を見つける方法

分類Dev

ユークリッドのアルゴリズムを使用してGCF / GCDを見つける方法は?

分類Dev

最適化アルゴリズムを使用して最適なパラメーターを見つける方法

分類Dev

最適化アルゴリズムを使用して最適なパラメーターを見つける方法

分類Dev

STLアルゴリズムを使用して最小値と最大値を見つける方法は?

分類Dev

画像暗号化アルゴリズムを見つける方法

分類Dev

(アルゴリズム)必要なノードのセット(おそらくBFSを使用)を通過し、Pythonで原点に戻る最短パスを見つける

分類Dev

関数の最小値点を見つけるアルゴリズム

分類Dev

再帰的アルゴリズムを使用して迷路内の最短経路を見つける

分類Dev

igraphを使用してシュタイナー木を見つけるKouのアルゴリズム

分類Dev

遺伝的アルゴリズム(数字と演算子を使用して式を見つける)

分類Dev

遺伝的アルゴリズムを使用して関数の最小値を見つける

分類Dev

長方形内のすべての点を見つける高速アルゴリズム

分類Dev

機械学習アルゴリズムを使用して、Pythonの2つのリストから最短点を見つけます

分類Dev

BFSを使用して、すべての頂点からゴール頂点までの距離を見つける方法はありますか?

分類Dev

他の2つの点に垂直な点を見つけるアルゴリズム

分類Dev

O(n)時間計算量アルゴリズムを使用して有効な部分文字列の数を見つける方法

分類Dev

Dinicのアルゴリズムを使用して、未処理のグラフで最小カットエッジを見つける方法は?

分類Dev

PGP暗号化(GPGを使用)で使用される対称暗号化アルゴリズムを見つける方法は?

分類Dev

'for'ループを置き換えて最小/最大をSTLmimaxアルゴリズムで見つける方法

分類Dev

アルゴリズムの時間計算量を見つける方法

分類Dev

アルゴリズムから漸化式を見つける方法

分類Dev

アルゴリズムの操作時間を見つける方法は?

分類Dev

数の最大の素数を見つけるアルゴリズム

分類Dev

アルゴリズムの命令の数を見つける

分類Dev

アルゴリズムの実行時間を見つける

分類Dev

Python:素数アルゴリズムを見つける

分類Dev

C ++で関数を見つける<アルゴリズム>

Related 関連記事

  1. 1

    bfsアルゴリズムを使用して境界点を見つける方法

  2. 2

    ダイクストラのアルゴリズムを使用して、頂点制約のある最短経路を見つける方法

  3. 3

    ユークリッドのアルゴリズムを使用してGCF / GCDを見つける方法は?

  4. 4

    最適化アルゴリズムを使用して最適なパラメーターを見つける方法

  5. 5

    最適化アルゴリズムを使用して最適なパラメーターを見つける方法

  6. 6

    STLアルゴリズムを使用して最小値と最大値を見つける方法は?

  7. 7

    画像暗号化アルゴリズムを見つける方法

  8. 8

    (アルゴリズム)必要なノードのセット(おそらくBFSを使用)を通過し、Pythonで原点に戻る最短パスを見つける

  9. 9

    関数の最小値点を見つけるアルゴリズム

  10. 10

    再帰的アルゴリズムを使用して迷路内の最短経路を見つける

  11. 11

    igraphを使用してシュタイナー木を見つけるKouのアルゴリズム

  12. 12

    遺伝的アルゴリズム(数字と演算子を使用して式を見つける)

  13. 13

    遺伝的アルゴリズムを使用して関数の最小値を見つける

  14. 14

    長方形内のすべての点を見つける高速アルゴリズム

  15. 15

    機械学習アルゴリズムを使用して、Pythonの2つのリストから最短点を見つけます

  16. 16

    BFSを使用して、すべての頂点からゴール頂点までの距離を見つける方法はありますか?

  17. 17

    他の2つの点に垂直な点を見つけるアルゴリズム

  18. 18

    O(n)時間計算量アルゴリズムを使用して有効な部分文字列の数を見つける方法

  19. 19

    Dinicのアルゴリズムを使用して、未処理のグラフで最小カットエッジを見つける方法は?

  20. 20

    PGP暗号化(GPGを使用)で使用される対称暗号化アルゴリズムを見つける方法は?

  21. 21

    'for'ループを置き換えて最小/最大をSTLmimaxアルゴリズムで見つける方法

  22. 22

    アルゴリズムの時間計算量を見つける方法

  23. 23

    アルゴリズムから漸化式を見つける方法

  24. 24

    アルゴリズムの操作時間を見つける方法は?

  25. 25

    数の最大の素数を見つけるアルゴリズム

  26. 26

    アルゴリズムの命令の数を見つける

  27. 27

    アルゴリズムの実行時間を見つける

  28. 28

    Python:素数アルゴリズムを見つける

  29. 29

    C ++で関数を見つける<アルゴリズム>

ホットタグ

アーカイブ