Найти все нули, окруженные единицами, в матрице - 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();
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
и . - Определяем размеры матрицы: NROW=4, NCOL=5.
- Задаем саму матрицу: char m[NROW][NCOL].
- Создаем функцию outOfMatrix(i, j), которая проверяет выход за границы матрицы и возвращает true при нарушении условий.
- Создаем функцию numberOfNeighbors(i, j), которая считает количество соседей (включая себя) равных нулю для заданной позиции в матрице.
- Создаем функцию findIsolatedZeros(), которая ищет все нули, окруженные единицами в матрице.
- В функции main() вызываем функцию findIsolatedZeros().
- В функции findIsolatedZeros() используем два вложенных цикла для перебора всех элементов матрицы.
- Если элемент равен нулю и количество соседей равно 8 (то есть он окружен единицами), то выводим его координаты.
- Запускаем программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д