Informatika gyűjtemény

Egy szinttel feljebb Villamos

2004050607080910

NézetNyomtat

Villamos

Egy négyzetrács-szerkezetű városban különleges villamosok közlekednek, ugyanis olyan pályán járnak, amelynek a négyzet alakú elemeit el tudják forgatni. Az elemek a következők:

Minden elem négyféle helyzetben állhat:
0: az ábrán látható módon
1: 90 fokkal jobbra elforgatva
2: 180 fokkal jobbra elforgatva
3: 270 fokkal jobbra elforgatva

Feladat:

Írj programot (VILLAMOS.PAS, VILLAMOS.C vagy VILLAMOS.CPP néven), amely megadja, hogy a villamos egy adott helyről egy másikra minimálisan hány lépésben (azaz a kezdőhelyet nem számítva hány elem érintésével) juthat el, illetve minimálisan hány lépésben juthat el akkor, ha azt az elemet, amelyen éppen áll, el tudja forgatni jobbra 90 fokkal! (Figyelem: a forgatás is lépésnek számít. Ugyanaz az elem több lépésben többször egymás után is elforgatható jobbra 90 fokkal.)

Bemenet:

A VILLAMOS.BE állomány első sorában a négyzetrács sorainak (1<=N<=100) és oszlopainak (1<=M<=100) a száma van. A következő N sorban soronként M számjegy-pár (két szorosan egymás mellé írt számjegy) található egy-egy szóközzel elválasztva; mindegyik sor a négyzetrács egy sorát írja le. A négyzetrács minden elemét a fenti ábrán megadott azonosító számból és az elforgatás kódjából álló számjegy-párral adjuk meg.
A bemenő állomány utolsó sorában négy egész szám van: a kezdőhely sor- és oszlopindexe, valamint a célhely sor- és oszlopindexe.

Kimenet:

A VILLAMOS.KI állomány első sorába azt a minimális lépésszámot kell írni, amely elegendő ahhoz, hogy a villamos eljusson a kezdőhelyről a célhelyre; a második sorba pedig ugyanezt a számot abban az esetben, ha a villamos elforgathatja azt az elemet, amelyen éppen áll vagy áthalad. A lépésszám legyen -1, ha nem lehet eljutni a kezdőhelyről a célhelyre!

Példa:

VILLAMOS.BEVILLAMOS.KI
4 5 00 21 00 00 13 20 40 20 20 32 11 20 00 00 21 40 20 20 32 33 1 2 4 110 6

Megjegyzés:

Út az 1. esetben: (1,2),(2,2),(2,3),(2,4),(2,5),(3,5),(4,5),(4,4),(4,3),(4,2),(4,1)
Út a 2. esetben: (1,2),(2,2),(2,1),fordít,(3,1),fordít,(4,1)

Tesztadatok