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

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

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

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

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

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

Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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++
C++ Звёздочки в двумерном массиве
C++ Функции в двумерном массиве
C++ Динамика в двумерном массиве
Потерялся в двумерном массиве C++

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

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

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