Ошибка в алгоритме программы, не могу понять как исправить
Код процедуры:
#define SIZE 25
short RazmKletki (short m, //размер
short n, //матрицы
float a[][SIZE]){ //входной массив
short h, //высота клетки
w, //ширина клетки
i,j,
raz, //счетчик разм клетки
razm, //размер клетки
KolPol; //колич положит элем клетки
short Min(short,short); //определяет максимальный из размеров матр
razm=1;
KolPol=0;
for(i=0; i<m-razm; i++){
for(j=0; j<n-razm; j++){
for(raz=razm; raz<Min(m,n); raz++){
for(h=i; h<raz+i; h++){
for(w=j; w<raz+j; w++){
if(a[h][w]>0) KolPol++;
}
}
if (KolPol!=((raz+i+1)*(raz+j+1))) break;
else razm++;
}
}
}
return razm;
}
файл MinRaz /*минимальный размер матрицы*/
short Min(short m, //kol strok
short n){ //kol stolbcov
short MinRazm; //min razmer
if (m<n) MinRazm=m;
else MinRazm=n;
return MinRazm;
}
Например:
Есть матрица:
1 2 3 -4
2 5 8 -7
9 8 8 1
-4 2 -7 0
Максимальный размер ее клетки=3, т.е клетка с элементами 00-22
Или др. пример
-1 2 -3 -4
-2 -5 8 7
-9 8 8 1
-4 2 -7 0
Максимальный размер ее клетки=2, т.е клетка с элементами 12-23
Клетка должна быть квадратной
Или:
-1 -2 -3 -4
-2 -5 -8 -7
-9 -8 -8 -1
-4 -2 -7 0
Соответственно размер=0
как я поняла из примера, в заданной квадратной матрице А нужно найти квадратные подматрицы с только положительными элементами и выдать размер максимальной из них.
IronGiant
во-первых, не понятно, зачем вводить 2 размерности и усложнять себе задачу, если в условии прописано, что исходная матрица квадратная? или я условия не поняла?
ну а функция RazmKletki для меня видится примерно так:
[highlight=cpp]int r1,r2,r,maxr=0;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++) {
// пробегаем по всем элементам матрицы
if(а[j]>0) {
// если элемент положительный, пытаемся найти размер клетки, которой он принадлежит
r1=r2=1;
for(int ii=i+1; ii<m; ii++)
if(a[ii][j]>0) r1++;
else break;
for(int jj=j+1; jj<n; jj++)
if(a[jj]>0) r2++;
else break;
r = Min(r1,r2)
for(ii=i+1; ii<i+r; ii++)
for(jj=j+1; jj<j+r; jj++)
if(a[ii][jj]<=0)
r = Min(ii-i,jj-j)+1;
if(r>maxr) maxr=r;
}
}
[/highlight]
IronGiant
во-первых, не понятно, зачем вводить 2 размерности и усложнять себе задачу, если в условии прописано, что исходная матрица квадратная? или я условия не поняла
[/highlight]
Все верно только можно этот код на
C, а то я еще +++ не изучал?
C, а то я еще +++ не изучал?
А почему ты решил что это код на c++?
Вроде никаких дополнительных возможностей с++ не используется...
Только надо "#91;" везде заменить на "[" - подсветка синтаксиса глючит.
Кстати в своем коде я описался в комментариях там h и w - это не высота и ширина клетки, а координаты ее первого элемента.
Спасибо!