Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

Пятнашки

(Время: 1 сек. Память: 16 Мб Сложность: 35%)

При решении задачи удобно использовать двумерный целочисленный массив a[1..n][1..n], который первоначально следует заполнить числами согласно описанному формату исходного состояния. Здесь можно воспользоваться тем фактом, что a[y][x]=(y-1)*n+x, кроме последнего элемента a[n][n], который соответствует пустому месту и должен быть равен нулю.

Далее, следует организовать моделирование, где мы будем перемещать пустое место (нолик в матрице) согласно последовательности заданных действий. Данная последовательность может быть считана в некоторую строку s и в дальнейшем обработана в цикле, где некоторый символ s[k] будет представлять направление движения нолика на k-м шаге. Координаты пустого места мы можем всегда хранить в переменных (x,y) и на каждом шаге их менять, параллельно проводя смену ячеек a[y][x] и a[yy][xx], где (x’,y’) – координата, в которую должен переместиться нолик. Если на каком-то шаге (x’,y’) окажется за пределами доски, то следует вывести текст ошибки с номером k и завершить программу. Если подобной ошибки в процессе моделирования не возникнет, то по завершении всех действий мы в нашем массиве получим ответ на задачу.

Алгоритмическая реализация:

  read(n,s)

  for y=1..n
    for x=1..n 
      a[y][x]=y*n+x+1
  a[n][n]=0

  x=y=n
  for k=1..len(s){
    x’=x; y’=y
    if(s[k]='U') y’--
    if(s[k]='D') y’++
    if(s[k]='L') x’--
    if(s[k]='R') x’++
    if(x’*y’*(x’-n-1)*(y’-n-1)==){
      write(’ERROR ’,k)
      exit
    }
    a[y][x] <---> a[y’][x’]
    y=y’; x=x’
  }

  for y=1..n{
    for x=1..n 
      write(a[y][x], ’ ’)
    writeln
  }

[Обсуждение] [Все попытки] [Задача]


Красноярский краевой Дворец пионеров, (c)2006 - 2025, ИНН 246305493507, E-mail: admin@acmp.ru