有C ++函数来计算两个索引之间的距离吗?

时间:2019-05-21 13:07:04

标签: c++ algorithm

我刚刚解决了一个编码任务,叫做“流明”。概括一下任务:在正方形数组中,将在随机索引中放置字母“ C”,代表蜡烛。最高的亮度“ L”(整数)将放置在字母“ C”的索引处,然后,必须计算所有相邻索引的亮度,直到L的值变为0。因此在索引arr [i] [ j]的亮度将设置为L,因为arr [i-1] [j]的所有组合均为L-1 ad,依此类推。 现在,在我的代码中,我有一个非常长的基于“ if”的计算,最大值为L = 3(在任务中,它变低而不变高)。 这是一些计算示例代码:


// CancelUploadWorkManager

class CancelUploadWorkManager(context: Context, params: WorkerParameters): CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        val position: Int = inputData.getInt(Constants.KEY_POSITION, 0)
        val userId = inputData.getString(Constants.KEY_DIRECTORY)
        val fileName = inputData.getString(Constants.KEY_FILE_NAME)

        return try {
            FirebaseManager().deleteAt(position = position, fileName = fileName!!,userId = userId!!)
            Timber.i("Work Manager executed")
            Result.success()
        } catch (ex: Exception) {
            Timber.e(ex)
            Result.retry()
        }

    }
}


是否存在一种更好且更不容易出现错误的方式来执行这些计算?我在某处读到,从本质上讲,这是逆切比雪夫距离计算(max(| x1-x2 |,| y1-y2 |)。 如果是这样,是否有函数可以在C ++中对其进行计算?我进行了一些搜索,找到了python3和java的文档,但没有C ++的文档。 谢谢您的时间!

1 个答案:

答案 0 :(得分:3)

首先找到蜡烛的索引,然后简单地遍历所有单元格:

int col, row;

for (int i = 0; i < N; ++i){
    for (int j = 0; j < N; ++j){
        if (map[i][j] == 'C') {
            col = j;
            row = i;
        }
    }
}

然后简单地遍历所有单元格,计算距离,然后计算亮度:

#include <cstdlib>    // for std::abs
#include <algorithm>  // for std::max

for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
        int distance = std::max(std::abs(i - row), std::abs(j - col));
        luminance[i][j] = std::max(L - distance, 0);
    }
}