我正在寻求实现一种连续的对角线搜索算法。这意味着它是一条长而不间断的线,从 MxN 网格的顶部开始,然后不断迭代直到结束,而不跳跃计算每个对角线。
我一直在试图找出这个算法,但我就是没有看到它。我将在下面上传我的作品图片。我正在尝试用 Java 或 C 编写这个算法,然后将其转换为 MIPS。我只是在尝试找到实际的算法时遇到了麻烦。
这是一个 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