根据您提供的输入和期望的输出:

输入:

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 的元素的最短距离,并输出结果。

希望这次的修改能够满足您的需求!如有其他问题,请随时提问。

C语言代码优化:计算矩阵中元素到最近1的距离

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

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