2

私は自分の評価に固執しています。次のような寸法 (行と列) のビットマップが与えられます。

4 5
0 0 1 1 1
0 0 1 0 1
1 0 1 1 1
1 1 1 1 1

タスクは、水平および垂直の最長の線と正方形 (すべて 1 でできている) を見つけることです。水平線で最初のキックが必要です。

ビットマップを 1D 配列に配置しましたが、次のステップがわかりません。

上の図の出力は、最も長い水平線の座標です。

3 0 3 4

助けていただければ幸いです。

4

1 に答える 1

1

ヘッダーを構造体に抽出し、データを[]のような配列に抽出する必要があります。

R と C を画像の行数と列数とします。与えられた配列 a[] の場合、画像の各行は a[C*i] から始まります。i は行番号です。そのため、i で行にインデックスを付け、C*i+j でその行の各ビットにアクセスできます。j は C よりも小さいものでした。次にprocessing、行ごとに実行して、最長の水平線の長さを見つける必要があります。これを少し変更すると、列 j にインデックスを付け、最長の垂直線を見つけることができます。

上記の処理を行うには、ポイントの構造を次のように作成します。

struct point 
{
  int x;
  int y;

}p1, p2;

lenhまた、検出された水平線の長さを含む変数を作成します。llenhまた、最長の長さを格納するためのユーザー変数。(5i+j) でインデックス付けされた行 (i, j) の各頂点。llenh0 に設定します。行から始めて、1 回の更新lenhを見て、それが より大きいかどうかを確認しますllenh。はいの場合は、ポイントを更新しp1ます。0 の更新p2ポイントを見て、0 に設定lenhし、さらに更新しllenhます。

これを完全に修正したわけではありません。エラーがあればコメントしてください..

于 2013-12-07T16:42:59.523 に答える