Swamp County Consulting müəmmalı bir hökumət agentliyindən "hədəflər" adlandırdıqları obyektlər arasındakı əlaqələri araşdırmaq üçün verilənlər bazası qurmaq üçün bir müqavilə əldə edib. Sizin komandanız, bu hədəf məlumatlarını saxlayan və aşağıda sadalanan əmrləri işləyən bir sistem həyata keçirmək üçün subpodratçı olaraq işə götürülüb.
Bir hədəf boşluq olmayan, maksimum 32 simvoldan ibarət bir sətirlə təmsil olunur. Bir əlaqə iki hədəf arasında ikitərəfli bir münasibətdir. Verilmiş bir hədəf (adlandırılan "hədəf1") və digər hədəflər arasındakı hop sayı aşağıdakı qaydalarla müəyyən edilir:
Hədəf1-ə birbaşa bağlı olan hədəflər 0 hop məsafəsindədir.
0 hop hədəflərinə birbaşa bağlı olan və artıq 0 hop hədəfi və ya orijinal hədəf kimi sayılmayan hədəflər 1 hop hədəfləridir.
Eyni şəkildə, n hop hədəflərinə birbaşa bağlı olan və artıq 0..n hop hədəfləri arasında sayılmayan hədəflər n+1 hop hədəfləridir.
Maksimum 100000 hədəf və maksimum 500000 əlaqə olacaq.
Əmrlər
Verilənlər bazası sistemində yalnız üç əmr var: əlavə et, əlaqəli, və əlaqələr. Hədəflər və əlaqələr heç vaxt silinmir, çünki Agentlik heç vaxt unutmur və ya səhv etmir. Əmrlər bir sətirin ilk sütununda başlayır. Əmrlər və onların parametrləri boşluqla ayrılır. Heç bir giriş sətri 80 sütunu keçməyəcək. Çıxış sətirində heç bir ön və ya son boşluq olmamalıdır.
əlavə et bir və ya iki parametr qəbul edir:
əlavə et hədəf1 //tək parametr
Funksiya: Hədəfi verilənlər bazasına əlavə edir, heç bir əlaqə olmadan.
Qeyd: Əgər hədəf artıq verilənlər bazasında varsa, heç nə etməyin (səhv deyil).
əlavə et hədəf1 hədəf2 //iki parametr
Funksiya: Hədəflər arasında ikitərəfli əlaqə yaradır.
Əgər hər iki hədəf hələ verilənlər bazasında deyilsə, onları əlavə edin və əlaqəni yaradın.
Əgər hədəflər arasında artıq bir əlaqə varsa, heç nə etməyin (səhv deyil).
Əgər hədəf1 və hədəf2 eynidirsə, bu əmri "əlavə et hədəf1" kimi qəbul edin (səhv deyil). Hədəflər arasında ən çox birbaşa əlaqə ola bilər.
əlaqələr hədəf1
Funksiya: Bir hədəfdən birbaşa və dolayı əlaqələrə qədər hop sayını qaytarır.
Hər hop sayı üçün ayrı bir sətirdə hop sayını, iki nöqtəni, bir boşluq və bu hop sayına malik hədəflərin sayını ön sıfırlar olmadan çap edin. Hop sayını 0 ilə başlayın və son sıfır olmayan hədəf sayının hop sayı ilə bitirin. Son boşluqları çap etməyin.
Əgər hədəfin heç bir əlaqəsi yoxdursa, yalnız "əlaqə yoxdur" sətirini çap edin.
Əgər hədəf verilənlər bazasında deyilsə, yalnız "hədəf mövcud deyil" sətirini çap edin (nöqtəsiz).
əlaqəli hədəf1 hədəf2
Funksiya: İki hədəf arasında əlaqənin mövcudluğu haqqında məlumat qaytarır.
Əgər hədəflər arasında bir yol varsa, ayrı bir sətirdə "bəli: n" çap edin, burada n hədəf1-ə nisbətən hədəf2-nin hop sayıdır. İki nöqtədən sonra bir boşluq var və ön sıfırlar və son boşluqlar yoxdur.
Əgər hədəflər arasında əlaqə yoxdursa, ayrı bir sətirdə "xeyr" çap edin.
Əgər hədəf1 və ya hədəf2 verilənlər bazasında deyilsə, yalnız "hədəf mövcud deyil" sətirini çap edin.
Giriş faylında bir neçə test halına imkan vermək üçün, verilənlər bazası əmrləri arasında "reset" əmri əlavə edirik ki, bu da verilənlər bazası əmri deyil və giriş faylındakı müxtəlif hallar üçün verilənlər bazası əmrləri arasında baş verir. Bu əmri oxuduğunuzda bütün məlumat strukturlarınızı sıfırladığınızdan əmin olun. Faylın sonuna qədər işləyin; məlumatların sonu bayrağı və ya faylın sonunda "reset" əmri yoxdur.
Hər bir halı "Hal", bir boşluq, hal nömrəsi və iki nöqtədən ibarət bir sətirlə başlayın. Hər bir halı on tire ilə bitirin.
Nümunə 1