IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> задача про фотографию, двумерный массив является цветной фотографией
oleg
сообщение 3.01.2006 15:39
Сообщение #1


Гость






Двумерный массив является "цветной фотографией", каж-
дый его элемент - номер цвета некоторой точки (от 1 до некото-
рого значения Max).
Будем считать, что если два элемента стоят рядом по
вертикали или по горизонтали и имеют одинаковый цвет, то они
принадлежат одной области. (Вся область определяется рефлек-
сивно-транзитивным замыканием этого отношения.)
Требуется найти количество разных цветных областей.
Запрещается пользоваться метками!

P.S до зачета три дня

Сообщение отредактировано: oleg - 3.01.2006 15:51
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 4.01.2006 11:20
Сообщение #2


Гость






Вот так попробуй (проверка выхода за пределы массива никогда не была лишней !!!):
program num_obl;
const maxN = 5;
type
arr = array[1..maxN, 1..maxN] of integer;
const
a: arr =
(
(1, 0, 0, 0, 1),
(0, 1, 1, 1, 0),
(0, 1, 0, 1, 0),
(0, 1, 0, 1, 0),
(1, 0, 0, 0, 1)
);
var
i,j,n : integer;
cou : integer = 0;
col : byte;

procedure flood(ii,jj : integer);
begin
if (a[ii,jj] <> col)
or
(ii < 1) or (jj < 1) or (ii > n) or (jj > n)
then exit;
a[ii,jj] := -1;
flood(ii - 1,jj);
flood(ii + 1,jj);
flood(ii,jj - 1);
flood(ii,jj + 1);
end;

begin
n := maxN;
for i := 1 to n do
for j := 1 to n do
if a[i,j] <> -1 then begin
cou := cou + 1;
col := a[i,j];
flood(i,j);
end;
writeln(cou);
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 20:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"