C语言二维数组距离计算:查找0到最近1的最短距离

场景描述

假设你有一个二维数组,其中包含0和1。你的目标是找到数组中每个0到最近的1的最短距离。

代码实现

以下是使用C语言编写的程序,用于计算二维数组中0到最近1的最短距离:c#include <stdio.h>#include <math.h>

int main() { int arr[99][99]; int ayy[99][99];

int n, m;    int number;    printf('请输入数组的行数和列数:');    scanf_s('%d %d', &n, &m);    printf('请输入数组元素(0或1):

'); for (int h = 0; h < n; h++) { for (int f = 0; f < m; f++) { scanf_s('%d', &number); arr[h][f] = number; ayy[h][f] = number; } }

printf('每个0到最近的1的最短距离为:

'); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (ayy[i][j] == 0) { int minDistance = 100; // 初始设定一个较大的值作为最短距离 for (int g = 0; g < n; g++) { for (int k = 0; k < m; k++) { if (arr[g][k] == 1) { int distance = abs(i - g) + abs(j - k); if (distance < minDistance) { minDistance = distance; } } } } printf('%d ', minDistance); } else { printf('0 '); // 如果是1,则距离为0 } } printf(' '); }

return 0;}

代码解释

  1. 数组声明: 该程序声明了两个二维数组 arrayy,大小均为 99x99。这些数组用于存储输入的0和1。2. 输入获取: 程序使用 scanf_s() 函数从用户那里获取数组的行数和列数 (nm)。然后,它使用嵌套循环读取用户输入的数组元素,并将它们存储在 arrayy 数组中。3. 距离计算: 程序使用另一个嵌套循环遍历 ayy 数组。对于 ayy 数组中每个为0的元素,程序会遍历整个 arr 数组,找到其中所有值为1的元素。对于每个值为1的元素,程序计算它到当前0元素的曼哈顿距离(即两点在水平和垂直方向上的距离之和)。程序会记录找到的最小距离,并将其存储在 minDistance 变量中。4. 结果输出: 最后,程序将 minDistance 的值打印到控制台,表示当前0元素到最近1元素的最短距离。

总结

这段代码提供了一种简单有效的方法,用于计算二维数组中每个0到最近的1的最短距离。它可以帮助你解决各种需要计算距离的编程问题。

C语言二维数组距离计算:查找0到最近1的最短距离

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

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