![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Dennis |
![]()
Сообщение
#1
|
Гость ![]() |
Есть массив(двумерный), который заполнен цифрами 1, 2, 3
Пример 1122 1212 2221 1211 за минимальное число раз сделать массив однородным, то есть так чтобы он состоял только из 1-ц,2-ек или 3-ек. Известно, что цифры меняются в соответствии: 1 на 3 2 на 1 3 на 2 причем при изменении какой-либо цифры помимо её самой, меняются и рядом стоящие с ней сверху, снизу, справа и слева в том же соответствии. В моём примере минимальное число операций будит равно двум (весь массив будит заполнен единицами). За ранее спасибо за помощь в реализации программы. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата(Dennis @ 24.02.05 10:43) За ранее спасибо за помощь в реализации программы. Это что значит? Что здесь надо готовую программу выложить? Я думаю, что всю программу никто писать не будет. Если есть какие-то конкретные проблемы - пожалуйста... Что именно не получается? |
Guest |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата(volvo @ 24.02.05 11:47) Это что значит? Что здесь надо готовую программу выложить? Я думаю, что всю программу никто писать не будет. Если есть какие-то конкретные проблемы - пожалуйста... Что именно не получается? Я вот пробовал, делать рекурсию с полным перебором, но происходит переполнение стека и... Вобщем мне бы просто подсказал какие идеи другие кроме перебора, а я конечно сам всё сделаю =) |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
А выложи-ка свою программу... Может и избавимся от переполнения стека ;)
|
Dennis |
![]()
Сообщение
#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. |
![]() ![]() |
![]() |
Текстовая версия | 15.04.2025 12:41 |