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

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

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

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


Гость






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

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

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


Гость






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

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


Гость






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

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


Гость






А выложи-ка свою программу... Может и избавимся от переполнения стека ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 5.05.2024 19:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name