二维数组距离计算:寻找最近'1'的距离

本文将介绍如何使用C语言计算二维数组中每个元素到最近'1'元素的距离。

问题描述:

给定一个只包含'0'和'1'的二维数组,编写一个程序计算每个元素到最近'1'元素的距离。如果元素本身的值为'1',则距离为'0'。

算法思路:

  1. 遍历整个二维数组,找到所有值为'1'的元素,并将它们的坐标存储在一个数组中。2. 再次遍历二维数组,对于每个元素: - 如果该元素值为'1',则距离为'0'。 - 如果该元素值为'0',则计算该元素与所有值为'1'的元素的距离,并选择最小的距离作为该元素的最终距离。

**代码实现:**c#include <stdio.h>#include <stdlib.h>#include <math.h>

struct Point { int x; int y;};

int main() { int distance = 0; int arr[99][99]; int n, m;

scanf('%d %d', &n, &m);

struct Point points[99*99];    int pointCount = 0;

for (int i = 0; i < n; i++) {        char line[m + 1];        scanf('%s', line);        for (int j = 0; j < m; j++) {            arr[i][j] = line[j] - '0';            if (arr[i][j] == 1) {                points[pointCount].x = i;                points[pointCount].y = j;                pointCount++;            }        }    }

for (int i = 0; i < n; i++) {        for (int j = 0; j < m; j++) {            int minDistance = n + m;            if (arr[i][j] == 0) {                for (int k = 0; k < pointCount; k++) {                    distance = abs(i - points[k].x) + abs(j - points[k].y);                    if (distance < minDistance) {                        minDistance = distance;                    }                }                printf('%d ', minDistance);            } else {                printf('%d ', arr[i][j]);            }        }        printf('

'); }

return 0;}

代码解释:

  1. 我们定义了一个结构体 Point 来存储值为 '1' 的元素的坐标。2. 使用两个嵌套循环遍历二维数组,找到所有值为 '1' 的元素,并将它们的坐标存储在 points 数组中。3. 再次使用两个嵌套循环遍历二维数组,对于每个元素,计算其与所有值为 '1' 的元素的距离,并选择最小的距离作为该元素的最终距离。

应用场景:

该算法可以应用于图像处理、模式识别等领域。例如,在图像处理中,可以使用该算法计算图像中每个像素到最近边缘的距离。

总结:

本文介绍了如何使用C语言计算二维数组中每个元素到最近'1'元素的距离。该算法简单易懂,可以应用于多种实际问题中。


原文地址: https://www.cveoy.top/t/topic/bEeh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录