![]() |
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 причем при изменении какой-либо цифры помимо её самой, меняются и рядом стоящие с ней сверху, снизу, справа и слева в том же соответствии. В моём примере минимальное число операций будит равно двум (весь массив будит заполнен единицами). За ранее спасибо за помощь в реализации программы. |
![]() ![]() |
Dennis |
![]()
Сообщение
#2
|
Гость ![]() |
Код 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. |
![]() ![]() |
![]() |
Текстовая версия | 26.06.2024 18:46 |