C语言二维数组距离计算:查找0到最近1的最短距离
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;}
代码解释
- 数组声明: 该程序声明了两个二维数组
arr和ayy,大小均为 99x99。这些数组用于存储输入的0和1。2. 输入获取: 程序使用scanf_s()函数从用户那里获取数组的行数和列数 (n和m)。然后,它使用嵌套循环读取用户输入的数组元素,并将它们存储在arr和ayy数组中。3. 距离计算: 程序使用另一个嵌套循环遍历ayy数组。对于ayy数组中每个为0的元素,程序会遍历整个arr数组,找到其中所有值为1的元素。对于每个值为1的元素,程序计算它到当前0元素的曼哈顿距离(即两点在水平和垂直方向上的距离之和)。程序会记录找到的最小距离,并将其存储在minDistance变量中。4. 结果输出: 最后,程序将minDistance的值打印到控制台,表示当前0元素到最近1元素的最短距离。
总结
这段代码提供了一种简单有效的方法,用于计算二维数组中每个0到最近的1的最短距离。它可以帮助你解决各种需要计算距离的编程问题。
原文地址: https://www.cveoy.top/t/topic/5G7 著作权归作者所有。请勿转载和采集!