次のような 2 次元配列があります。
1 1 0 0 1
1 0 1 1 0
0 0 1 1 0
1 1 0 1 1
0 0 1 1 1
横方向または下方向に連続する 1 の最長のチェーンを特定する方法を見つけようとしています。この場合、列 4、行 2 から始まり、その長さは 4 で下に向かっています。
再帰を使用することを考えていましたが、特に 0 に遭遇したときに、位置を追跡する際に問題が発生しています。
これまでのところ、私はこれに沿ったものを持っています(全体をチェックするためだけに):
main() {
...
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if (G[i][j] == 1) {
CheckAcross(i, j, n);
}
...
}
void CheckAcross (int i, int j, int n) {
if (i < 0 || i >= n || j < 0 || j >= n) return; // outside of grid
if (G[i][j] == 0 ) return; //0 encountered
G[i][j] = WordCount + 1;
CheckAcross(i, j + 1, n);
}
ここG[][]
で、 は 1 と 0 を含む 2 次元配列n
、 は行/列のi
数、 は行番号、j
は列番号です。
事前にご協力いただきありがとうございます。