C语言二维数组距离计算:寻找最近的'1'
C语言二维数组距离计算:寻找最近的'1'
本文将介绍如何使用C语言计算二维数组中每个元素到最近的'1'的距离。
问题描述
给定一个由'0'和'1'组成的二维数组,编写一个程序计算数组中每个元素到最近的'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;}
代码解释
-
数据结构定义: - 使用结构体
Point存储值为'1'的元素的坐标。 -
输入处理: - 读取二维数组的维度
n和m。 - 使用嵌套循环读取二维数组的值,并将值为'1'的元素的坐标存储在points数组中。 -
距离计算: - 使用嵌套循环遍历二维数组中的每个元素。 - 对于每个元素,如果其值为'0',则遍历
points数组,计算该元素与所有值为'1'的元素之间的距离,并选择最小的距离进行输出。 - 如果元素值为'1',则直接输出其原始值。
示例输入
3 4000100110110
示例输出
3 2 1 02 1 0 01 0 0 1
总结
本文介绍了如何使用C语言计算二维数组中每个元素到最近的'1'的距离。通过使用结构体存储坐标信息和嵌套循环遍历数组,可以高效地解决此类问题。
原文地址: https://www.cveoy.top/t/topic/bEeN 著作权归作者所有。请勿转载和采集!