无数个九宫格组成的矩阵,随机选一个点为中心,计算出它周围的8个格子内最大且比它大的格子做下一个中心,有什么简洁优美的计算方法吗?

发布于 2022-09-02 09:28:44 字数 307 浏览 7 评论 0

直到找到一个中心,它周围的8个格子内的数字都比他小,寻找停止,打印路径。示例图如下。
(我想到的方法是把周围八个格子按顺时针添加进一个数组,数组排序找出最大的数字,然后strchr找出来它的数组地址,根据顺时针的规律就能知道这个数字在九宫格内的位置坐标,然后以它作为中心,递归。但是这个方法只是说出来就觉得太笨了,不知道前辈们有没有什么更好的想法?)

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

擦肩而过的背影 2022-09-09 09:28:44
用一个二维数组保存每个格子上的数 这样格子a[i][j]上面的数(如果上面有数,不是边界)就是a[i-1][j], 左上角的数是a[i-1][j-1] 右上角的数是a[i-1][j+1],下一步怎么走的话就是拿这周围的几个数中最大的那个跟自己比较, 直到没有比他小的,用数组记录路径。
花落人断肠 2022-09-09 09:28:44

如果是逐个格子找的话,就是一个大二维数组最简单,周围八个格子就手写

[x-1,y-1]
[x,y-1]
[x+1,y-1]
...
[x+1,y+1]

挺优雅的啊。

如果数据集很大并且有规律,可以考虑优化方法,跳过一部分格子加速搜索。当然那就是另外的话题了

落花随流水 2022-09-09 09:28:44

可以预先列出八个方向的向量,这样就避免了写八段重复的代码。

如下所示:

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];
    // ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文