Вывести порядок, в котором находятся машины после обработки всех сообщений - Pascal
Формулировка задачи:
В гонках "Формулы N" участвует N машин. В результате квалификационного заезда машины получили порядковые номера и стартовали в порядке от 1 до N.
Вася - страстный поклонник гонок, но у него в общежитии плохой интернет и он не может смотреть видео-трансляцию. Поэтому он вынужден читать текстовую трансляцию, в которой все сообщения имеют вид "Машина номер X обогнала машину номер Y".Вася ненадолго отвлекся и перестал понимать текущий порядок машин на трассе.
Помогите ему понять, в каком порядке расположены машины по известным сообщениям с начала текстовой трансляции.
В первой строке заданы два натуральных числа N и M (1 ≤ N, M ≤ 100000) - количество машин и сообщений об обгоне соответственно.
В следующих M строках содержатся описание сообщений об обгоне: пары чисел X и Y (1 ≤ X, Y ≤ N) - машина X обогнала машину Y. Гарантируется, что машина Y ехала непосредственно перед машиной X на момент сообщения.
Выведите N чисел - порядок, в котором находятся машины после обработки всех сообщений.
Решение задачи: «Вывести порядок, в котором находятся машины после обработки всех сообщений»
textual
Листинг программы
ReadLn(n,m);
for i:=1 to n do a[i]:=i;
for m:=1 to m do begin
ReadLn(x,y);
i:=1; while a[i]<>y do Inc(i);
{if a[i+1]<>x then begin WriteLn('*** Ошибка данных'); Halt; end;}
a[i]:=x; a[i+1]:=y;
end;
for i:=1 to n do Write(' ',a[i]); WriteLn;
Объяснение кода листинга программы
n- значение переменнойnсчитывается с помощью ReadLnm- значение переменнойmсчитывается с помощью ReadLn- Цикл
for i:=1 to n do a[i]:=i;- заполняет массивaзначениями от 1 доn - Цикл
for m:=1 to m do begin- начало цикла для обработки соответствующего количества сообщений - Считывание значений
xиyс помощью ReadLn i:=1; while a[i]<>y do Inc(i);- находит индексiв массивеa, содержащий значениеya[i]:=x; a[i+1]:=y;- изменяет порядок элементов в массивеa, перемещая элемент с индексомiперед элемент с индексомi+1for i:=1 to n do Write(' ',a[i]);- выводит элементы массиваaчерез пробелWriteLn;- переводит курсор на новую строку.