84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
认证0级讲师
用一个二维数组保存每个格子上的数 这样格子a[i][j]上面的数(如果上面有数,不是边界)就是a[i-1][j], 左上角的数是a[i-1][j-1] 右上角的数是a[i-1][j+1],下一步怎么走的话就是拿这周围的几个数中最大的那个跟自己比较, 直到没有比他小的,用数组记录路径。
如果是逐个格子找的话,就是一个大二维数组最简单,周围八个格子就手写
[x-1,y-1] [x,y-1] [x+1,y-1] ... [x+1,y+1]
挺优雅的啊。
如果数据集很大并且有规律,可以考虑优化方法,跳过一部分格子加速搜索。当然那就是另外的话题了
可以预先列出八个方向的向量,这样就避免了写八段重复的代码。
如下所示:
const int dx[] = {0, 0, 1, -1, -1, -1, 1, 1}; const int dy[] = {1, -1, 0, 0, -1, 1, 1, -1}; // ... for (int i = 0; i < 8; ++i) { int cur_x = x + dx[i]; int cur_y = y + dy[i]; // ... }
如果是逐个格子找的话,就是一个大二维数组最简单,周围八个格子就手写
挺优雅的啊。
如果数据集很大并且有规律,可以考虑优化方法,跳过一部分格子加速搜索。当然那就是另外的话题了
可以预先列出八个方向的向量,这样就避免了写八段重复的代码。
如下所示: