我是 c++ 的新手,有没有一种算法可以找到 3d 数组中最接近的 0 的距离?



在 3D 数组中,对角线元素为 0,即 a[k][k][k]=0,表示 k=1 到 10。我需要用到最接近 0 的距离填充剩余矩阵。

我遇到了广度优先搜索,但是我可以不使用数据结构吗?(不熟悉数据结构(

unsigned short d = 10, r = 10, c = 10;
double*** a = new double** [d];
for (int i = 0; i < d; ++i) {
a[i] = new double* [r];
for (int j = 0; j < r; ++j)
a[i][j] = new double[c];
}
for (int i = 0; i < 10; i++) {
a[i][i][i] = 0;
}

返回一个 3D 距离数组。

您可以通过计算曼哈顿距离找到所有零并找到最近的零。 另一种有效的方法是使用BFS算法。BFS 中找到的第一个零是离源最接近的零。 这是 2D 阵列排序距离的教程

只需用这个公式填充你的矩阵,所有的 i, j, k :

a[i][j][k] = MAX(i,j,k) - MIN(i,j,k)

曼哈顿到对角线的距离确实是最高指数和最低指数之间的差异。

这个公式非常简单,看起来有些神奇,但它有效!

最新更新