Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка в алгоритме программы, не могу понять как исправить

36K
21 мая 2008 года
IronGiant
7 / / 21.05.2008
Постановка задачи: Определить, максимальный размер клетки квадратной матрицы A произвольного размера, состоящей только из положительных элементов
Код процедуры:
Код:
#include <stdio.h>
#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;
}
360
21 мая 2008 года
P*t*
474 / / 15.02.2007
А что такое "максимальный размер клетки квадратной матрицы"?
36K
21 мая 2008 года
IronGiant
7 / / 21.05.2008
Цитата: P*t*
А что такое "максимальный размер клетки квадратной матрицы"?



Например:
Есть матрица:
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

360
21 мая 2008 года
P*t*
474 / / 15.02.2007
Может тогда не размер клетки, а значение в ней?
37K
22 мая 2008 года
iyulka
12 / / 06.05.2008
Цитата: P*t*
Может тогда не размер клетки, а значение в ней?


как я поняла из примера, в заданной квадратной матрице А нужно найти квадратные подматрицы с только положительными элементами и выдать размер максимальной из них.

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]

36K
22 мая 2008 года
IronGiant
7 / / 21.05.2008
Цитата: iyulka
как я поняла из примера, в заданной квадратной матрице А нужно найти квадратные подматрицы с только положительными элементами и выдать размер максимальной из них.

IronGiant
во-первых, не понятно, зачем вводить 2 размерности и усложнять себе задачу, если в условии прописано, что исходная матрица квадратная? или я условия не поняла
[/highlight]



Все верно только можно этот код на
C, а то я еще +++ не изучал?

360
22 мая 2008 года
P*t*
474 / / 15.02.2007
Цитата: IronGiant
Все верно только можно этот код на
C, а то я еще +++ не изучал?



А почему ты решил что это код на c++?
Вроде никаких дополнительных возможностей с++ не используется...
Только надо "#91;" везде заменить на "[" - подсветка синтаксиса глючит.

36K
23 мая 2008 года
IronGiant
7 / / 21.05.2008
А понятно. Я чисто из-за "#91;" и подумал что это С++!
Кстати в своем коде я описался в комментариях там h и w - это не высота и ширина клетки, а координаты ее первого элемента.
Спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог