1

800 x 600 の画像があります。行列のように扱い、隣接する要素を取得したい

元。

(0,0) (1,0) (2,0) (3,0)

(0,1) (1,1) (2,1) (3,1)

(0,2) (1,2) (2,2) (3,2)

(0,3) (1,3) (2,3) (3,3)

解の例: (0,0) は (1,0) (0,1) (1,1) に隣接しています。

(1,1) は (0,0) (1,0) (2,0) (2,1) (2,2) (1,2) (0,2) (0,1) に隣接しています。

だから私はこれらのポイントのそれぞれを格納する構造体配列を書きました

typdef struct point
{
    int x;
    int y;
}point[800*600];

私の最初のアイデアは、dfs を実装することでしたが、それは実際にはうまくいきませんでした。そのため、自分自身を正しい軌道に乗せるために外部の意見を得たいと考えました。ありがとう

4

1 に答える 1

0

最終的な答えは、2D ディスプレイの配置を 1D 配列に視覚化する方法 ('row-first column-last' または 'column-first row-last') によって異なります。

「行優先」を仮定すると (行に沿ったピクセルは 1 ずつ増加し、列に沿ったピクセルは ROW_LENGTH ずつ増加します):

最初にいくつかの定義を使用して、ROW_LENGTH と COL_LENGTH の値を設定します。

#define ROW_LENGTH 800
#define COL_LENGTH 600

その後、コードの残りの部分の動作に影響を与えることなく、必要に応じてサイズを簡単に調整できます。

typdef struct point
{
    int x;
    int y;
}point[ROW_LENGTH*COL_LENGTH];

後で、次のような方法で隣接するポイントを取得できます。

adjacentWest = point[(y*ROW_LENGTH) + (x-1)];
adjacentNorth = point[((y+1)*ROW_LENGTH) + x];

原点がディスプレイの左上か左下かによって、北と南を +1 または -1 に調整する必要があります。

于 2011-03-31T18:58:37.867 に答える