84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
认证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]; // ... }
如果是逐个格子找的话,就是一个大二维数组最简单,周围八个格子就手写
挺优雅的啊。
如果数据集很大并且有规律,可以考虑优化方法,跳过一部分格子加速搜索。当然那就是另外的话题了
可以预先列出八个方向的向量,这样就避免了写八段重复的代码。
如下所示: