|
|||||||||||||||
|
Gonitwa
Gonitwa jest grą planszową dla dwóch osób A i B. Plansza do gry składa się z pól ponumerowanych kolejnymi liczbami naturalnymi, poczynając od 1. Dla każdej pary różnych pól wiadomo, czy są sąsiednie, czy nie. Każdy z graczy dysponuje jednym pionem, który początkowo znajduje się na wskazanym z góry polu planszy, każdy pion na innym polu. Ruch gracza polega na przesunięciu własnego piona na jedno z sąsiednich pól lub pozostawieniu piona na miejscu. Plansza ma następujące właściwości:
Gra składa się z wielu rund następujących po sobie. W jednej rundzie każdy z graczy wykonuje jeden ruch, przy czym gracz A zawsze wykonuje swój ruch przed ruchem gracza B. Powiemy, że gracz B dogonił gracza A, jeżeli oba piony znajdą się na tym samym polu. Rozstrzygnij, czy dla danych początkowych położeń obu pionów, gracz B może dogonić gracza A, niezależnie od tego jak dobrze gra gracz A. Jeśli tak, to po ilu rundach gracz B dogoni gracza A, jeżeli gracz A stara się uciekać jak najdłużej, a gracz B stara się dogonić gracza A jak najszybciej i obaj grają optymalnie? PrzykładRozważmy planszę przedstawioną na rysunku. Sąsiednie pola planszy są połączone odcinkami. Jeżeli na początku gry pion gracza A znajduje się na polu 9, natomiast pion gracza B jest na polu 4, to gracz B dogoni A w trzeciej rundzie, o ile obaj gracze grają optymalnie. Gdyby pion gracza A znajdował się początkowo na polu 8, to ruszając z pola 4 gracz B nie ma szans na dogonienie A, jeżeli tylko ten gra optymalnie. ZadanieNapisz program, który: WejścieW pierwszym wierszu pliku wejściowego GON.IN znajdują się cztery liczby całkowite n, m, a oraz b, oddzielone pojedynczym odstępem, gdzie: 2<=n<=3000, n-1<=m<=15000, 1<=a,b<=n oraz a <b. Są to odpowiednio: liczba pól na planszy, liczba wszystkich różnych par (nieuporządkowanych) tych pól, które ze sobą sąsiadują, numer pola, na którym jest umieszczony pion gracza A oraz numer pola, na którym jest umieszczony pion gracza B. W każdym z następnych m wierszy znajdują się dwie różne liczby całkowite dodatnie oddzielone pojedynczym odstępem. Liczby w każdym z tych wierszy są numerami dwóch pól, które ze sobą sąsiadują. WyjścieTwój program powinien zapisać w pierwszym i jedynym wierszu pliku GON.OUT jedno słowo NIE, jeśli gracz B nigdy nie dogoni gracza A, a w przeciwnym przypadku jedną liczbę całkowitą liczbę rund, po których, gracz B dogoni gracza A. PrzykładDla pliku wejściowego GON.IN: 9 11 9 4 1 2 3 2 1 4 4 7 7 5 5 1 6 9 8 5 9 8 5 3 4 8poprawnym rozwiązaniem jest plik wyjściowy GON.OUT: 3 Twój program powinien szukać pliku GON.IN w katalogu bieżącym i tworzyć plik GON.OUT również w bieżącym katalogu. Plik zawierający napisany przez Ciebie program w postaci źródłowej powinien mieć nazwę GON.??? gdzie zamiast ??? należy wpisać co najwyżej trzyliterowy skrót nazwy użytego języka programowania. Ten sam program w postaci wykonalnej powinien być zapisany w pliku GON.EXE.
|