Zəncir Kodu#1803

Zəncir Kodu

1 saniyə
64 meqabayt
Orta

Qara-ağ (iki səviyyəli) bir təsvirə baxdıqda, bir-biri ilə əlaqəli qara piksellər obyektlər və ya ön plan kimi qəbul edilir, ağ piksellər isə fon rolunu oynayır. Əlaqəli qara piksellərin hər bir qrupu, sərhədindəki piksellərin koordinatlarını saat əqrəbinin əksinə istiqamətdə, sərhədin hər hansı bir nöqtəsindən başlayaraq sadalamaqla tam şəkildə təsvir edilə bilər. Bu piksellərin siyahısı isə, siyahıdakı növbəti pikselə olan istiqamət kimi göstərilə bilər. Bu istiqamətlər silsiləsi obyektin zəncir kodu (chain code) adlanır və obyektin formasını mövqeyindən asılı olmayaraq dəqiq təsvir edir.

Bir pikseldən qonşu piksələ 8 müxtəlif istiqamət mümkündür və bu istiqamətlərin nömrələnməsi ixtiyari olsa da, şəkil 1 standart qəbul edilən nömrələnməni göstərir. 0 istiqaməti "sağa", 2 "yuxarıya" deməkdir, 1 isə 0 və 2 istiqamətləri arasında 45 dərəcə təşkil edir və s.

İki qara piksel, aralarındakı məsafənin kvadratı 2-dən çox deyilə qonşu sayılır. Bu, hər bir tam ədədi koordinatda piksel yerləşdirilən standart qrafik koordinat sisteminə əsaslanır. İki piksel əlaqəlidirsə, aralarında qonşu piksellərdən ibarət fasiləsiz yol tapmaq mümkündür. Əlaqəli bir region daxilində hər bir üzv bir-biri ilə əlaqəlidir. Əlaqəli regionun sərhəd pikselləri (bundan sonra sadəcə region deyəcəyik) — region daxilində olan və dörd əsas istiqamətdə ən azı bir qara olmayan qonşusu olan piksellərdir. Bu tapşırıq üçün, regionda "dəliklər" olmadığını və cəmi bir sərhəd olduğunu qəbul edə bilərsiniz.

Regionun zəncir kodu sərhəddəki istənilən pikseldən başlaya bilər. Proses növbəti qonşu sərhəd pikselini saat əqrəbinin əksinə istiqamətdə tapmaq, istiqaməti (0-7) çıxış buferinə yazmaq və yeni piksel ilə proseduru davam etdirməklə davam edir. Proses başlanğıc pikselə çatdıqda zəncir kod tamamlanır. Çıxış buferində zəncir kodunu təşkil edən istiqamətlərin ardıcıllığı saxlanılır və bu ardıcıllığa əsasən başlanğıc pikselin yerindən asılı olmayaraq orijinal piksel dəstini bərpa etmək mümkündür.

Məsələn, şəkil 2-dəki regionun zəncir kodu 446567001232-dir. Zəncir kod regionun formasını birmənalı və unikal şəkildə təsvir edir, baxmayaraq ki, onun mövqeyi məlum deyil. Formayla bağlı göstəricilər, məsələn, perimetr və sahə (regiondakı piksel sayı) birbaşa zəncir kodla müəyyən edilə bilər. Sizdən yalnız zəncir kodu verilmiş əlaqəli regionun sahəsini hesablayan proqram yazmanız tələb olunur.

Giriş

Giriş bir neçə sətrdən ibarət olacaq, hər sətrdə bir zəncir kodu veriləcək. Hər bir zəncir kodu ən çox 1000000 simvol ehtiva edir. Qəbul edək ki, hər bir zəncir kodu düzgün bir region təsvir edir və sərhədin öz-özünə kəsişməsi yoxdur.

Çıxış

Girişdəki hər bir zəncir kodu üçün regionun sahəsini (yəni oraya daxil olan piksellərin sayını) ayrıca sətrdə çap edin.

Nümunələr

Nümunə 1

Loading
Loading