直到找到一个中心,它周围的8个格子内的数字都比他小,寻找停止,打印路径。示例图如下。
(我想到的方法是把周围八个格子按顺时针添加进一个数组,数组排序找出最大的数字,然后strchr找出来它的数组地址,根据顺时针的规律就能知道这个数字在九宫格内的位置坐标,然后以它作为中心,递归。但是这个方法只是说出来就觉得太笨了,不知道前辈们有没有什么更好的想法?)
直到找到一个中心,它周围的8个格子内的数字都比他小,寻找停止,打印路径。示例图如下。
(我想到的方法是把周围八个格子按顺时针添加进一个数组,数组排序找出最大的数字,然后strchr找出来它的数组地址,根据顺时针的规律就能知道这个数字在九宫格内的位置坐标,然后以它作为中心,递归。但是这个方法只是说出来就觉得太笨了,不知道前辈们有没有什么更好的想法?)
如果是逐个格子找的话,就是一个大二维数组最简单,周围八个格子就手写
[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];
// ...
}
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读