C语言代码优化:计算矩阵中元素到最近1的距离
根据您提供的输入和期望的输出:
输入:
3 4
0001
0011
0110
期望的输出:
3 2 1 0
2 1 0 0
1 0 0 1
以下是修改后的代码,以正确输出您期望的结果:
#include <stdio.h>
#include <math.h>
int main() {
int distance = 0;
int arr[99][99];
int ayy[99][99];
int n, m;
int number;
scanf('%d %d', &n, &m);
for (int h = 0; h < n; h++) {
for (int f = 0; f < m; f++) {
scanf('%d', &number);
arr[h][f] = number;
ayy[h][f] = number;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] == 1 && ayy[i][j] == 1)
printf('0 ');
else if (ayy[i][j] == 0) {
int minDistance = n + m; // 初始设定一个较大的值作为最短距离
for (int g = 0; g < n; g++) {
for (int k = 0; k < m; k++) {
if (arr[g][k] == 1) {
distance = abs(i - g) + abs(j - k);
if (distance < minDistance) {
minDistance = distance;
}
}
}
}
printf('%d ', minDistance);
}
}
printf('
');
}
return 0;
}
修改后的代码会按照您期望的格式输出最短距离。对于每个元素,如果其值为 1 并且 ayy 中对应位置的值也为 1,则输出 0;如果其值为 0,则计算与数组 arr 中值为 1 的元素的最短距离,并输出结果。
希望这次的修改能够满足您的需求!如有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/54q 著作权归作者所有。请勿转载和采集!