【发布时间】:2015-10-28 15:18:16
【问题描述】:
给定一个二维数组,找出最长的递减数字序列。约束是: 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;
}
}
}
谢谢
【问题讨论】:
-
请展示您目前尝试过的代码
-
编辑问题并添加代码。
-
不确定我是否可以问这个...但是版主可以提高这个问题的评分吗?我已经按照社区的预期添加了代码。并改进了整体内容。
-
@AlexanderStaroselsky:请查看此问题的评分。我已根据需要编辑并添加了代码。
-
我目前不影响评分。
标签: c algorithm matrix 2d longest-path