扫码关注官方订阅号
认证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]; // ... }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
如果是逐个格子找的话,就是一个大二维数组最简单,周围八个格子就手写
挺优雅的啊。
如果数据集很大并且有规律,可以考虑优化方法,跳过一部分格子加速搜索。当然那就是另外的话题了
可以预先列出八个方向的向量,这样就避免了写八段重复的代码。
如下所示: