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

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

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

нужно найти все нули в матрице покрытые вокруг единицами: вот написал, но не чего не выдает, подскажите что неправильно
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 4
  4. #define NULL ((void*)0)
  5. int func ( int mat[][N] )
  6. {
  7. int i, j, z, k;
  8. int sum = 0;
  9. for ( i = 0; i < N; i++ )
  10. {
  11. for ( j = 0; j < N; j++ )
  12. {
  13. if ( mat[i][j] == 0 )
  14. {
  15. if(mat[i-1][j-1] == 1 || mat[i-1][j] == 1 || mat[i-1][j+1] == 1)
  16. {
  17. sum++;
  18. }
  19. if(mat[i][j-1] == 1 || mat[i][j+1] == 1)
  20. {
  21. sum++;
  22. }
  23. if(mat[i+1][j-1] == 1 || mat[i+1][j] == 1 || mat[i+1][j+1] == 1)
  24. {
  25. sum++;
  26. }
  27. }
  28. if ( sum == 8 )
  29. {
  30. printf ( "%d,%d", i, j );
  31. }
  32. }
  33. }
  34. }
  35. int main()
  36. {
  37. int mat[N][N] = {{0, 1, 1, 0},
  38. {1, 1, 1, 1},
  39. {1, 0, 1, 0},
  40. {1, 1, 1, 0}
  41. };
  42. func ( mat );
  43. return 0;
  44. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3.  
  4. #define NROW 4
  5. #define NCOL 5
  6.  
  7. char m[NROW][NCOL] =
  8. {
  9.     {0, 1, 1, 0, 1},
  10.     {1, 1, 1, 1, 1},
  11.     {0, 1, 0, 1, 0},
  12.     {1, 1, 1, 1, 1}
  13. };
  14.  
  15. bool outOfMatrix(int i, int j)
  16. {
  17.     return i < 0 || j < 0 || i >= NROW || j >= NCOL;
  18. }
  19.  
  20. int numberOfNeighbors(int i, int j)
  21. {
  22.     int neighbors = 0;
  23.     for (int di = -1; di <= 1; di++)
  24.         for (int dj = -1; dj <= 1; dj++)
  25.         {
  26.             if (di==0 && dj==0) continue;
  27.             int ni = i+di, nj = j+dj;
  28.             if (outOfMatrix(ni, nj) || m[ni][nj] == 1)
  29.                 ++neighbors;
  30.         }
  31.  
  32.     return neighbors;
  33. }
  34.  
  35. void findIsolatedZeros()
  36. {
  37.     for (int i=0; i<NROW; i++)
  38.         for (int j=0; j<NCOL; j++)
  39.         {
  40.             if (m[i][j] == 0 && numberOfNeighbors(i, j) == 8) {
  41.                 printf("[%d, %d]\n", i, j);
  42.             }
  43.         }
  44. }
  45.  
  46. int main ()
  47. {
  48.     findIsolatedZeros();
  49. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы