与えられた 2D 配列で、減少する数の最長のシーケンスを見つけます。制約は次のとおりです。 1. 要素を斜めに比較することはできません。
例:
56 14 51 58 88
26 94 24 39 41
24 16 8 51 51
76 72 77 43 10
38 50 59 84 81
5 23 37 71 77
96 10 93 53 82
94 15 96 69 9
74 0 62 38 96
37 54 55 82 38
ans は次のとおりです: 7
そして以下のマトリックスについて
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
25 -> 24 -> 23 -> 22 -> …というように 1 に到達するまで続けます。
誰かがアルゴリズムを手伝ってくれませんか。
これは私の最初のコードでした:
int dx[4] = {0, 1, -1, 0};
int dy[4] = {1, 0, 0, -1};
int findSequence(int x, int y)
{
for(int i = 0; i < 4; ++i)
{
int new_x = x + dx[i];
int new_y = y + dy[i];
if(isValid(new_x, new_y) && data[x][y] > data[new_x][new_y])
{
std::cout << "" << data[x][y] << " -> " << data[new_x][new_y] << " ";
int tmp = 1 + findSequence(new_x, new_y, isVisited);
//std::cout << " "<< tmp << " ";
return tmp;
}
}
}
ありがとう