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

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

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

 
 Ответить  Открыть новую тему 
> Игра с цифрами
Dennis
сообщение 24.02.2005 11:43
Сообщение #1


Гость






Есть массив(двумерный), который заполнен цифрами 1, 2, 3
Пример
1122
1212
2221
1211

за минимальное число раз сделать массив однородным, то есть так чтобы он состоял только из 1-ц,2-ек или 3-ек. Известно, что цифры меняются в соответствии:
1 на 3
2 на 1
3 на 2

причем при изменении какой-либо цифры помимо её самой, меняются и рядом стоящие с ней сверху, снизу, справа и слева в том же соответствии. В моём примере минимальное число операций будит равно двум (весь массив будит заполнен единицами). За ранее спасибо за помощь в реализации программы.
 К началу страницы 
+ Ответить 
volvo
сообщение 24.02.2005 11:47
Сообщение #2


Гость






Цитата(Dennis @ 24.02.05 10:43)
За ранее спасибо за помощь в реализации программы.

Это что значит? Что здесь надо готовую программу выложить? Я думаю, что всю программу никто писать не будет. Если есть какие-то конкретные проблемы - пожалуйста... Что именно не получается?
 К началу страницы 
+ Ответить 
Guest
сообщение 24.02.2005 11:51
Сообщение #3


Гость






Цитата(volvo @ 24.02.05 11:47)
Это что значит? Что здесь надо готовую программу выложить? Я думаю, что всю программу никто писать не будет. Если есть какие-то конкретные проблемы - пожалуйста... Что именно не получается?

Я вот пробовал, делать рекурсию с полным перебором, но происходит переполнение стека и... Вобщем мне бы просто подсказал какие идеи другие кроме перебора, а я конечно сам всё сделаю =)
 К началу страницы 
+ Ответить 
volvo
сообщение 24.02.2005 12:00
Сообщение #4


Гость






А выложи-ка свою программу... Может и избавимся от переполнения стека ;)
 К началу страницы 
+ Ответить 
Dennis
сообщение 24.02.2005 12:04
Сообщение #5


Гость






Код
program my;

uses crt; const num=10;
type my1=array[1..num,1..num] of char;
type my2=array[1..num,1..num] of char;

var

  m,n,i,j,ci,cj:byte;
  k:string;
  min,el:integer;
  opn:longint;
  a:my1;
  b:my2;
  F,F1:text;

function odnor:byte;
        begin
        for i:=1 to n do
         begin
              for j:=1 to m do
                  begin
                       if b[i,j] = b[1,1] then
                          inc(el);
                  end;
         end;

         if el=n*m then odnor:=1 else odnor:=0;

        end;


{////////////////////////////////////////////////////////////////////////////}

procedure selector(ci,cj:byte);
         begin
              case b[ci,cj] of
                   '1': begin b[ci,cj]:='3'; exit; end;
                   '2': begin b[ci,cj]:='1'; exit; end;
                   '3': begin b[ci,cj]:='2'; exit; end;
              end;
         end;

{////////////////////////////////////////////////////////////////////////////}

procedure changecolor(i,j:byte);
         begin

              selector(i,j);

              if (i > 1) then
                      selector(i-1,j);

              if (j < m) then
                      selector(i,j+1);

              if (i < n) then
                      selector(i+1,j);

              if (j > 1) then
                      selector(i,j-1);

         end;

{////////////////////////////////////////////////////////////////////////////}

procedure forw(i,j:byte);
         begin

              inc(opn);

              if odnor = 0 then
                 begin

                      changecolor(i,j);

                      if (i > 1) then
                         forw(i-1,j);

                      if (j < m) then
                         forw(i,j+1);

                      if (i < n) then
                         forw(i+1,j);

                      if (j > 1) then
                         forw(i,j-1);

                 end
                 else
                      min:=opn;

       end;

{////////////////////////////////////////////////////////////////////////////}
{//////////////////////////// Reading from input file ///////////////////////}

begin clrscr;

     assign(F,'input.txt');
     reset(F);

              read(F,n);
              readln(F,m);

     for i:=1 to n do
         begin
              readln(F,k);
              for j:=1 to m do
                  begin
                       a[i,j]:=k[j];
                       b[i,j]:=k[j];
                       write(a[i,j]);
                  end; writeln;
         end;
     close(F);

{////////////////////////////////////////////////////////////////////////////}


writeln;
writeln;


     for i:=1 to n do
         begin
              for j:=1 to m do
                  begin
                       opn:=0;
                       forw(i,j);
                  end; writeln;
         end;


     for i:=1 to n do
         begin
              for j:=1 to m do
                  begin
                       write(b[i,j]);
                  end; writeln;
         end;
         writeln;

         writeln(min);
readkey;
end.
 К началу страницы 
+ Ответить 

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

 



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