Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
tammeoja
1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
#1

Нохождение локального минимуму в двумерном массиве - C++

12.05.2009, 12:39. Просмотров 1241. Ответов 12
Метки нет (Все метки)

Помогите решить такую задачу :

Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2009, 12:39     Нохождение локального минимуму в двумерном массиве
Посмотрите здесь:

Найти номер его последнего локального максимума в массиве. - C++
Дан массив размера N. Найти номер его последнего локального максимума.(Локальный максимум-это элемент,который больше любого из своих...

Динамика в двумерном массиве - C++
Всем привет. Подскажите, пожалуйста, реально ли реализовать такое. Есть заранее найденное n - не константа. Нужно, чтобы массив...

Палиндром в двумерном массиве - C++
Задача звучит так :С клавиатуры вводится размерность целочисленной матрицы, затем сама матрица. Найти строку, порядок элементов которой...

Звёздочки в двумерном массиве - C++
Дано нечетное число n, не превосходящее 15. Создайте двумерный массив из n×n элементов, заполнив его символами "." (каждый элемент массива...

Потерялся в двумерном массиве - C++
#include <iostream> using namespace std; int main() { setlocale (LC_ALL, "Russian"); const int m=6, n=4; int a; int x...

Указатели в двумерном массиве - C++
Помогите пожайлуста!!! Как занулить главную диогональ, скока не пробовал, ни как не получается.... не могу найти ошибку :wall: Вот...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alibaba314
18 / 18 / 1
Регистрация: 22.03.2009
Сообщений: 58
12.05.2009, 18:20     Нохождение локального минимуму в двумерном массиве #2
покажи пример??
tammeoja
1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
12.05.2009, 18:35  [ТС]     Нохождение локального минимуму в двумерном массиве #3
1 2 3 4 5
6 7 8 8 4
9 7 4 2 3
4 4 5 8 9

тока матрица будет 10 на 10.

Жирным шрифтом выделены локальные минимумы.
Конечно можно решить эту задачу множеством ифов (if) и for .
но как рацианальней это сделать?
alibaba314
18 / 18 / 1
Регистрация: 22.03.2009
Сообщений: 58
13.05.2009, 08:36     Нохождение локального минимуму в двумерном массиве #4
решение:

Код
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
void main()
{
	int a[10][10], i, j, n, m,  t;
	cout<<"type number column n: "; cin>>n;
	cout<<"type number row m: "; cin>>m;
	for(i=0; i<n; i++)
	 for(j=0; j<m; j++)
	 {
	 	a[i][j]=rand() % 10;
	 }
 	for(i=0; i<n; i++)
 	{
 		for(j=0; j<m; j++)
 		{
 			cout<<a[i][j];
 			cout.width(4);
	 	}
	 	cout<<"\n";
 	}
 	cout<<"\nnumber min:\n";
 	for(i=0; i<n; i++)
	 for(j=0; j<m; j++)
	 	if(a[i][j]<a[i-1][j]&&a[i][j]<a[i-1][j-1]&&a[i][j]<a[i-1][j+1]&&a[i][j]<a[i+1][j-1]&&a[i][j]<a[i+1][j-1]&&a[i+1][j+1]
                                       &&a[i][j]<a[i][j-1]&&a[i][j]<a[i][j+1])
	 	{
	 	cout<<a[i][j]<<"\t";
	 	}
	 return 0;
}
alibaba314
18 / 18 / 1
Регистрация: 22.03.2009
Сообщений: 58
14.05.2009, 09:34     Нохождение локального минимуму в двумерном массиве #5
tammeoja не отвечает! правильно ли я сделал.
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
14.05.2009, 10:03     Нохождение локального минимуму в двумерном массиве #6
Цитата Сообщение от alibaba314 Посмотреть сообщение
tammeoja не отвечает! правильно ли я сделал.
Нет. Берем элемент с индексом 0,0 и смотрим с какими элементами он проверяется...
tammeoja
1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
14.05.2009, 15:31  [ТС]     Нохождение локального минимуму в двумерном массиве #7
опппссс, извини ещё не проверил, сегодня вечером проверю обязательно.
alibaba314
18 / 18 / 1
Регистрация: 22.03.2009
Сообщений: 58
14.05.2009, 23:37     Нохождение локального минимуму в двумерном массиве #8
вот я так сделал:

Код
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define h 100
int in(int a[h][h], int n, int m);
int out(int a[h][h], int n, int m);
int max(int a[h][h], int n, int m); 
int massivB(int a[h][h], int b[h][h], int n, int m);
int in(int a[h][h], int n, int m)
{
	for(int i=0; i<n; i++)
	for(int j=0; j<m; j++)
	{
			a[i][j]=rand() % 10;
	}
}
int out(int a[h][h], int n, int m)
{
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<m; j++)
		{
			cout<<a[i][j];
			cout.width(4);
		}
		cout<<"\n";
	}
}
int massivB(int a[h][h], int b[h][h], int n, int m)
{
	for(int i=1; i<n+1; i++)
	for(int j=1; j<m+1; j++)
	{
	  b[i][j]=a[i-1][j-1];
	}
	/*---------------------------------------*/
	int max=a[0][0];
	for(int i=0; i<n; i++)
	for(int j=0; j<m; j++)
	{
		if(a[i][j]>max) max=a[i][j];
	}
	/*-------------------------------*/
	for(int j=0; j<m+2; j++)
	{
	  b[0][j]=max;
	  b[n+2][j]=max;
    }
	for(int i=0; i<n+2; i++)
	{ 
	  b[i][0]=max;
	  b[i][m+2]=max;
    }
}
void main()
{
	srand(time(0));
	int a[h][h], b[h][h], n, m;
	cout<<"type number row: ";cin>>n;
	cout<<"type number column: "; cin>>m;
	in(a, n, m);
	cout<<"first matrix:\n";
	out(a, n, m);
	massivB(a, b, n, m);
	cout<<"\nnumber local min:\n";
 	for(int i=0; i<n+2; i++)
	 for(int j=0; j<m+2; j++)
	 	if(b[i][j]<b[i-1][j]&&b[i][j]<b[i-1][j-1]&&b[i][j]<b[i-1][j+1]&&b[i][j]<b[i+1][j-1]&&b[i][j]<b[i+1][j-1]&&b[i+1][j+1]
                                       &&b[i][j]<b[i][j-1]&&b[i][j]<b[i][j+1]&&(i!=0)&&(i!=n+2)&&(j!=0)&&(j!=m+2))
	 	{
	 	cout<<b[i][j]<<"\t";
	 	}
}
tammeoja
1 / 1 / 0
Регистрация: 12.05.2009
Сообщений: 7
15.05.2009, 12:35  [ТС]     Нохождение локального минимуму в двумерном массиве #9
Предыдущий вариант был неверным. сегодня проверю новый.
alibaba314
18 / 18 / 1
Регистрация: 22.03.2009
Сообщений: 58
16.05.2009, 19:38     Нохождение локального минимуму в двумерном массиве #10
да, предыдущий вариант был неверным, а последующий ?
Ultrator
11 / 7 / 1
Регистрация: 28.04.2009
Сообщений: 219
17.05.2009, 19:36     Нохождение локального минимуму в двумерном массиве #11
Да тут for for, только есть 1-но "ускорение":
1) если элемент [i,j] является л.м., то ни один из его соседей уже не будет л.м. (т.е. его "соседей" из дальнейшей проверки надо вообще исключить).
Других значительных "ускорений", думаю, нет.
Ivannumberone
4 / 4 / 0
Регистрация: 17.05.2009
Сообщений: 27
17.05.2009, 19:42     Нохождение локального минимуму в двумерном массиве #12
Не кто и не говорил про ускорение!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2009, 20:41     Нохождение локального минимуму в двумерном массиве
Еще ссылки по теме:

Функции в двумерном массиве - C++
Ввести двумерные массивы X1,X2. В этих массивах найти минимальные элементы. Преобразовать каждую матрицу, увеличив её отрицательные...

Указатели в двумерном массиве - C++
Например есть массив int** mas=new int*; for(int i=0; i&lt;=str;i++) mas=new int; for (int i=0; i&lt;str; i++ ) for (...

Строки в двумерном массиве - C++
Здравствуйте! Хочу прояснить некоторые моменты по работе с двумерным массивом. Достичь хочу следующего: есть строки с фразами string...

В двумерном массиве подсчитать - C++
Для каждой строки в двумерном массиве подсчитать количество положительных элементов и записать данные в новый массив. Помогите плз, а то в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ultrator
11 / 7 / 1
Регистрация: 28.04.2009
Сообщений: 219
17.05.2009, 20:41     Нохождение локального минимуму в двумерном массиве #13
Я просто хотел сказать
как рацианальней это сделать
Ну, т.е., как "улучшить".
(автору ж вроде надо "не просто if for")
Yandex
Объявления
17.05.2009, 20:41     Нохождение локального минимуму в двумерном массиве
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru