1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
На поле размера N*M расположено некоторое число (от 1 до 100) вирусов. За один ход вирус заражает 4 соседние клетки, имеющие с ним общую сторону. Все вирусы хотят одновременно. За какое минимальное число ходов будет заражено все поле?
Входные данные: Числа N и M, разделенные пробелом (1<=N,M<=1000). Далее N строк по M символов - поле с вирусами. Пустая клетка обозначается точкой. Клетка с вирусом обозначается *.
Выходные данные: Единственное число - ответ задачи.
Пример входных данных 3 4 .... ..*. .... Пример выходных данных 3
Не знаю как проверять, если будет больше одного вируса
{$APPTYPE CONSOLE}const p=1000;
var pol:array [1..p,1..p] of char;
n,m,i,j,hod:integer;
function getwin:boolean;
var i,j:integer;
begin
result:=true;
for i:=1to n dofor j:=1to m doif pol[i,j]<>'*'thenbegin
result:=false;
exit;
end;
end;
Function v(i,j:byte):boolean;
beginif pol[i,j]='*'then result:=true else result:=false;
end;
begin
hod:=0;
assign(input,'input.txt');
readln(n,m);
for i:=1to n dofor j:=1to m do pol[i,j]:=#0;
for i:=1to n dobeginfor j:=1to m do read(pol[i,j]);
readln;
end;
whilenot(getwin) dobeginfor i:=1to n dobeginfor j:=1to m dobeginif v(i,j) thenbeginif (i<n) andnot v(i+1,j) then pol[i+1,j]:='#';
if (j<m) andnot v(i,j+1) then pol[i,j+1]:='#';
if (i>1) andnot v(i-1,j) then pol[i-1,j]:='#';
if (j>1) andnot v(i,j-1) then pol[i,j-1]:='#';
end;
end;
end;
for i:=1to n dofor j:=1to m doif pol[i,j]='#'then pol[i,j]:='*';
inc(hod);
end;
assign(output,'output.txt');
writeln(hod);
end.
Обновлено.
Сообщение отредактировано: Unconnected -
--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."