Локальный Минимум

  • Автор темы venti
  • Дата начала
V

venti

Гость
#1
Элемент двумерного массива называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером (n × n) найти максимум среди всех локальных минимумов.
C++:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int kol(0), z(0), max(0),k(0),l(0),c(0),c1(0);
int n=StrToInt(Edit1->Text);
StringGrid1->ColCount=n;
StringGrid1->RowCount=n;

for ( int i=0; i<n; i++)					//ищут минимумы по углам
for (int j=0; j<n; j++)
{ if (i==0) c=0;
else c=n-1;
if (j==0) c1=0;
else c1=n-1;
{ for (l=j;l<j+1;l++)
for (k=i;k<i+1;k++)
{if ((StringGrid1->Cells[j][i]<StringGrid1->Cells[l+c][k+c1]) && (j!=l+c) && (i!=k+c1))
z++;}

if ((i==0)&&(j!=0)) c=0;										 //ищет минимумы по краям сторон, насчет правильности этого цикла не уверен
else c=n-1;
if ((j==0)&&(i!=0)) c1=0;
else c1=n-1;
{ for (l=j;l<j+1;l++)
for (k=i;k<i+1;k++)
{if ((StringGrid1->Cells[j][i]<StringGrid1->Cells[l+c][k+c1]) && (j!=l+c) && (i!=k+c1))
z++;}


if ((i!=0)&&(j!=0))										  //ищет в середине
for (k=i; k<i-1; k--)
for (l=j; l<j-1; l--)
{ if ((StringGrid1->Cells[j][i]<StringGrid1->Cells[l][k]) && (i!=k) && (j!=l));
z++;
}
}

if ((z==3) || (z==5) || (z==8))
{
kol++;
if (StringGrid1->Cells[j][i]>max)
max=StrToInt(StringGrid1->Cells[j][i]);
}
}
Edit2->Text=IntToStr(kol);
Edit3->Text=IntToStr(max);
}
надеюсь на помощь