Найти все нули, окруженные единицами, в матрице - 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 (то есть он окружен единицами), то выводим его координаты.
- Запускаем программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д