对角线搜索算法

问题描述 投票:0回答:2

我正在寻求实现一种连续的对角线搜索算法。这意味着它是一条长而不间断的线,从 MxN 网格的顶部开始,然后不断迭代直到结束,而不跳跃计算每个对角线。

我一直在试图找出这个算法,但我就是没有看到它。我将在下面上传我的作品图片。我正在尝试用 Java 或 C 编写这个算法,然后将其转换为 MIPS。我只是在尝试找到实际的算法时遇到了麻烦。 Image of the algorithm I am trying to implement

java c algorithm diagonal
2个回答
0
投票

这是一个 C 语言示例,用于迭代计算 2D 数组的锯齿形行走的

x
y
坐标:

#include <stdio.h>

#define M 10
#define N 8

int main(void) {
    int mat[M][N];
    int x = 0, y = 0, dx = 1, dy = -1;
    int n;

    for (n = 0; n < M * N; n++) {
        mat[y][x] = n;
        x += dx;
        y += dy;
        if (x == N) {
            x -= 1;
            y += 2;
            dx = -1;
            dy = 1;
        } else
        if (y < 0) {
            y += 1;
            dx = -1;
            dy = 1;
        } else
        if (y == M) {
            x += 2;
            y -= 1;
            dx = 1;
            dy = -1;
        } else
        if (x < 0) {
            x += 1;
            dx = 1;
            dy = -1;
        }
    }
    for (y = 0; y < M; y++) {
        for (x = 0; x < N; x++) {
            printf(" %3d", mat[y][x]);
        }
        printf("\n");
    }
    return 0;
}

输出:

   0   1   5   6  14  15  27  28
   2   4   7  13  16  26  29  43
   3   8  12  17  25  30  42  44
   9  11  18  24  31  41  45  58
  10  19  23  32  40  46  57  59
  20  22  33  39  47  56  60  69
  21  34  38  48  55  61  68  70
  35  37  49  54  62  67  71  76
  36  50  53  63  66  72  75  77
  51  52  64  65  73  74  78  79

0
投票

继续@user85421的建议,在下面的地图中,颜色告诉下一个单元格的方向。

通过测试 x+y 的奇偶性可以轻松确定棋盘图案(黄绿交替)。在边缘用红色替换黄色或用蓝色替换绿色很简单。

if even(x+y)
  if y=ymin or y=ymax, red else yellow
else
  if x=xmin or x=xmax, blue else green
© www.soinside.com 2019 - 2024. All rights reserved.