Найти все нули, окруженные единицами, в матрице - C (СИ)

Узнай цену своей работы

Формулировка задачи:

нужно найти все нули в матрице покрытые вокруг единицами: вот написал, но не чего не выдает, подскажите что неправильно
#include <stdio.h>
#include <stdlib.h>
#define N 4
#define NULL ((void*)0)
int func ( int mat[][N] )
{
    int i, j, z, k;
    int sum = 0;
 
    for ( i = 0; i < N; i++ )
        {
            for ( j = 0; j < N; j++ )
                {
                    if ( mat[i][j] == 0 )
                        {
                            if(mat[i-1][j-1] == 1 || mat[i-1][j] == 1 || mat[i-1][j+1] == 1)
                            {
                                sum++;
                            }
                            if(mat[i][j-1] == 1 || mat[i][j+1] == 1)
                            {
                                sum++;
                            }
                            if(mat[i+1][j-1] == 1 || mat[i+1][j] == 1 || mat[i+1][j+1] == 1)
                            {
                                sum++;
                            }
 
                        }
                        if ( sum == 8 )
                                {
                                    printf ( "%d,%d", i, j );
                                }
                }
        }
 
}
int main()
{
    int mat[N][N] = {{0, 1, 1, 0},
                                {1, 1, 1, 1},
                                {1, 0, 1, 0},
                                {1, 1, 1, 0}
    };
    func ( mat );
    return 0;
}

Решение задачи: «Найти все нули, окруженные единицами, в матрице»

textual
Листинг программы
#include <stdio.h>
#include <stdbool.h>
 
#define NROW 4
#define NCOL 5
 
char m[NROW][NCOL] =
{
    {0, 1, 1, 0, 1},
    {1, 1, 1, 1, 1},
    {0, 1, 0, 1, 0},
    {1, 1, 1, 1, 1}
};
 
bool outOfMatrix(int i, int j)
{
    return i < 0 || j < 0 || i >= NROW || j >= NCOL;
}
 
int numberOfNeighbors(int i, int j)
{
    int neighbors = 0;
    for (int di = -1; di <= 1; di++)
        for (int dj = -1; dj <= 1; dj++)
        {
            if (di==0 && dj==0) continue;
            int ni = i+di, nj = j+dj;
            if (outOfMatrix(ni, nj) || m[ni][nj] == 1)
                ++neighbors;
        }
 
    return neighbors;
}
 
void findIsolatedZeros()
{
    for (int i=0; i<NROW; i++)
        for (int j=0; j<NCOL; j++)
        {
            if (m[i][j] == 0 && numberOfNeighbors(i, j) == 8) {
                printf("[%d, %d]\n", i, j);
            }
        }
}
 
int main ()
{
    findIsolatedZeros();
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: и .
  2. Определяем размеры матрицы: NROW=4, NCOL=5.
  3. Задаем саму матрицу: char m[NROW][NCOL].
  4. Создаем функцию outOfMatrix(i, j), которая проверяет выход за границы матрицы и возвращает true при нарушении условий.
  5. Создаем функцию numberOfNeighbors(i, j), которая считает количество соседей (включая себя) равных нулю для заданной позиции в матрице.
  6. Создаем функцию findIsolatedZeros(), которая ищет все нули, окруженные единицами в матрице.
  7. В функции main() вызываем функцию findIsolatedZeros().
  8. В функции findIsolatedZeros() используем два вложенных цикла для перебора всех элементов матрицы.
  9. Если элемент равен нулю и количество соседей равно 8 (то есть он окружен единицами), то выводим его координаты.
  10. Запускаем программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы