给定一个二维数组,找出最长的递减数序列。约束是: 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
答案是: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,因为我可以以 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;
}
}
}
谢谢