Qraf ortadan#7256

Qraf ortadan

0,2 saniyə
256 meqabayt
Çox çətin

Lisa Simpson, "Simpsonlar" cizgi filmindən tanınan bir obraz, bir gün əlaqəli, yönsüz qrafın bir zirvəsində tapılır. Lisa qrafın zirvələri arasında hərəkət edə bilər, amma yalnız hazırda olduğu zirvəni və ona birbaşa bitişik zirvələri görə bilir. Qrafı araşdırmaq üçün yanında kağız-qələm olmadığından, Lisa kömək üçün zirvələrdə qoyub-götürə biləcəyi daşlardan istifadə edir. Bir zirvədə maksimum 1000 daş saxlamaq olar, bu Lisa üçün kifayətdir. Qrafda 2-dən 500-ə qədər zirvə var.

Tapşırıq

Problem iki alt tapşırıqdan ibarətdir:

  1. Birinci alt tapşırıqda heç bir zirvədə daş yoxdur və Lisa qrafın neçə zirvəsindən ibarət olduğunu öyrənmək istəyir.

  2. İkinci alt tapşırıqda, başlanğıc zirvəsindən fərqli bir zirvədə bir daş qoyulur, digərlərində heç nə yoxdur. Lisa başlanğıc zirvəsindən daş yerləşən zirvəyə minimum kənar sayını (yəni ən qısa yolun uzunluğunu) tapmalıdır; hər bir kənar uzunluğu vahid sayılır.

graph prosedurunu yazın. Cari zirvə və onun qonşularında olan daş sayına görə Lisaya növbəti addımını (neçə daş qoymaq, götürmək və ya hansı bitişik zirvəyə getmək) seçməyə kömək edir; əgər cavab hazırdırsa, onu qaytarır.

Reallaşdırma Detalları

graph prosedurunun reallaşdırmasını və (lazım olarsa) əlavə köməkçi kodu, lakin əsas proqramın bədəni olmadan (yəni C++ üçün main, Pascal üçün begin/end olmadan) göndərməlisiniz. Test zamanı faylınız münsiflərin hazırladığı xüsusi proqram ilə birləşdiriləcək və prosedurun düzgünlüyü orada yoxlanacaq. Prosedur aşağıdakı kimi olmalıdır:

C++:

void graph(int subproblem, int neighborsCount, int neighbors[], int &current, int &whereToGo, int &answer);

Pascal:

procedure graph(subproblem, neighborsCount: longint; var neighbors: array of longint; var current, whereToGo, answer: longint);

Parametrlər

  1. subproblem — alt tapşırıq nömrəsi: 1 — zirvə sayı, 2 — ən qısa yol; qraf üçün sabitdir.

  2. neighborsCount — cari zirvəyə birbaşa qoşulanların sayı.

  3. neighbors — neighborsCount ölçülü massiv (0-dan başlayır), qonşu zirvələrdəki daş sayı. Massivin sırası müxtəlif çağırışlarda dəyişə bilər, hətta eyni zirvə üçün belə. Daxildə massiv dəyişsə də, bu, qrafdakı vəziyyətə təsir etməz — Lisa yalnız öz yerindəki daş sayını dəyişə bilər.

  4. current — cari zirvədəki daş sayı; prosedurda artırmaq/azaltmaq olar, lakin həddi 0–1000 pozmamaq şərtilə. Bu, həqiqi zirvədəki daş sayını da dəyişəcək.

  5. whereToGo — başlanğıcda -1. Lisa qrafı tədqiq etməyə davam edirsə, bunu növbəti addımda getməli olduğu qonşunun daş sayı ilə dəyişin (diqqət: bu indeks deyil, dəyərdir!). Əgər massivdə eyni dəyər bir neçə dəfə varsa, Lisa onlardan birinə gedəcək, hansına getdiyini siz seçə bilmirsiniz. Əgər cavab hazırdırsa, dəyəri dəyişməyin.

  6. answer — başlanğıcda -1. Əgər cavab hazırdırsa, bu dəyərlə əvəz edin, əks halda dəyişməyin.

Hər addımda yalnız həmin an ötürülən bilgi əsasında qərar verin. Əvvəlki çağırışların heç biri və ya proqramla qarşılıqlı təsir nəticəyə təsir etməməlidir. Prosedur deterministik olmalıdır: eyni giriş üçün eyni nəticə qaytarmalıdır.

Öz Testiniz

Nümunə əsas proqram (graph_tester.cpp / graph_tester.pas) sizin faylınızla eyni qovluqda, graph.dat verilmiş strukturda olmalıdır. Proqramınızı və test faylınızı eyni qovluğa qoyun. Qiymətləndirmə proqramı fərqli ola bilər.

graph_tester: Giriş

Birinci sətrdə 4 ədəd: zirvə sayı , kənar sayı , başlanğıc zirvə və (alt tapşırıq 2 üçün) daş olan zirvənin nömrəsi ( — birinci alt tapşırıq üçündür). Sonra sətirdə hərəsində iki ədəd — qraf kənarlarının verilməsi (zirvə nömrələri).

graph_tester: Çıxış

Bir sətr: prosedurdan alınan cavab və ya texniki tələb pozularsa səhv mesajı.

Qiymətləndirmə

Testlər dörd blokda verilmişdir:

  1. 30 bal: 1-ci alt tapşırıq, qraf — ağac

  2. 20 bal: 1-ci alt tapşırıq, qraf — istənilən əlaqəli

  3. 10 bal: 2-ci alt tapşırıq, qraf — ağac

  4. 40 bal: 2-ci alt tapşırıq, qraf — istənilən əlaqəli

Qeyd. Əgər prosedur texniki tələbləri pozsa, cavabda icra və ya kompilyasiya xətası ola bilər. Yaddaş limiti ən azı MB-dır. Qlobal dəyişənlərdən istifadə icazəlidir.

Nümunələr

Nümunə 1

Loading
Loading