помогите решить задачу через функции на си
В матрице A (m,n), состоящей из нулей и единиц, найти квадрат заданного размера (квадратную подматрицу), состоящий целиком из нулей. Набросок:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
void scan ( int x,int y,int A[x][y] ) {
int i;
for ( i = 0 ; i < x ; i++ ) {
for(int j = 0; j < y; j++)
scanf ("%d", &A[i][j]);
printf("\n");
}
}
void print( int x, int y,int A[x][y]) {
for(int i = 0; i < x; i++) {
for(int j = 0; j < y; j++)
printf("%5d",A[i][j]);
printf ("\n");
}
}
int search(int *o,int *u,int *i,int *j,int *plus,int r, int x, int y,int A[x][y]) {
for(; *i < x-r; *i++) {
for(; *j < y-r; *j++) {
for(; *o < r; *o++) {
for(; *u < r; *u++) {
if (A[*i+*o][*j+*u]==0) {
*plus+=1;
}
}
}
if (*plus==(r*r)) {
printf("квадратная подматрица существует");
}
*o=0;
*u=0;
*plus=0;
}
}
return 0;
}
int main() {
setlocale(LC_ALL,"Rus");
int n,m,q,i=0,j=0,o=0,u=0,pmat;
int plus=0;
printf ("Введите размер матрицы ");
scanf("%d%d",&n,&m);
printf ("\nВведите размер подматрицы ");
scanf("%d",&pmat);
int A[n][m];
if (n>1 && m>1) {
scan(n,m,A);
print(n,m,A);
search(&o,&u,&i,&j,&plus,pmat,n,m,A);
} else printf ("Квадратной подматрицы не существует");
return 0;
}
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
а не проще ли вот этот ужас
int search(int *o,int *u,int *i,int *j,int *plus,int r, int x, int y,int A[x][y]) {
for(; *i < x-r; *i++) {
for(; *j < y-r; *j++) {
for(; *o < r; *o++) {
for(; *u < r; *u++) {
if (A[*i+*o][*j+*u]==0) {
*plus+=1;
}
}
}
if (*plus==(r*r)) {
printf("квадратная подматрица существует");
}
*o=0;
*u=0;
*plus=0;
}
}
return 0;
}
заменить на
bool chech(const int left, const int top, const int size, int** matrix) {
int i, j; // вроде на C нельзя внутри for задавать переменные
for (i = left; i < left + size; i ++)
for (j = top; j < top + size; j ++)
if (matrix[i][j] != 0)
return false;
return true;
}
void search(const int width, const int height, const int size, int** matrix) {
int i, j;
for (i = 0; i < width - size; i ++)
for (j = 0; j < height - size; j ++)
if (check(i, j, size, matrix) == true) {
printf("существует по координатам [%d][%d]", i, j);
return;
}
printf("не существует");
}