Alqoritm

Spiral Matrix – saat əqrəbi və əksi istiqamətində (ardı)

spiral-matrix
Written by Mushfiq Mammadov

Bundan əvvəlki yazıda qeyd etmişdim ki, Spiral Matrix ilə bağlı yazdığım kod bəyənilməmişdi. Səbəb isə o idi ki, for dövründən çox istifadə edilmişdi. Belə başa düşdüm ki, bu tapşırığı bir for dövrü ilə də həll etmək mümkündür. Ona görə də internetdə əlavə araşdırma etməyə başladım.

Bu mövzu ilə bağlı bir xeyli yazı oxudum, araşdırma elədim. Gəldiyim qənaət isə belə oldu ki, spiral matrix alqoritminin işləməsində əsas 2 qanunauyğunluq var (saat əqrəbi istiqamətində):

  1. istiqamət üzrə – “sağ -> aşağı -> sol -> yuxarı" təkrarlanır;
  2. addımlar üzrə – hər iki istiqamətdən bir gediləcək addımların sayı 1 artır, yəni 1 sağ, 1 aşağı, 2 sol, 2 yuxarı, 3 sağ, 3 aşağı, 4 sol, 4 yuxarı və s. –> 1, 1, 2, 2, 3, 3, 4, 4...

Bu qanunauyğunluqdan yola çıxaraq nəhayət ki, ancaq bir for dövründən istifadə etməklə tapşırığı həll edə bildim. Daha anlaşıqlı olsun deyə kodda istifadə edilən bəzi dəyişənlərin şərhini aşağıda qeyd etmişəm:

direction – istiqaməti bildirir, 0 – sağ, 1 – aşağı, 2 – sol, 3 – yuxarı;
steps – cari istiqamət üzrə (direction) gediləcək addımların sayı;
currentStep – ümumi addımlar içərisindən (steps) cari addımın nömrəsini bildirir, cari istiqamət üzrə gediləcək addımların bitib-bitməməsini yoxlamaq üçün istifadə edilir;
change – istiqamətin dəyişib dəyişmədiyini yoxlayır, hər 2 istiqamət dəyişikliyindən sonra addımların sayını (steps) bir artırmaq üçün istifadə edilir.

Output:

Bundan sonra növbəti iki funksionallığın da əlavə edilməsi istənildi:

  1. Mərkəz nöqtəsi əgər 1-dən çoxdursa, hansı nöqtədən başlanılmasını istəyə bağlı olaraq təyin edə bilmə;
  2. Matrixin bütün elementlərinin spirala daxil edilməsi. Yəni əgər matrix kvadrat deyilsə, hələ də spirala düşməyən element qalıbsa, matrixdən çölə çıxıb yenidən içəri daxil olma. 

Qeyd etdiyim funksionallıqlar da əlavə edildikdən sonra kodun son vəziyyəti aşağıdakı kimi oldu:

Output:

Alınan nəticəni yoxlamaq daha rahat olsun deyə kodun son versiyasında xırda dəyişiklik etdim. Son versiyada matrixin elementləri birbaşa spiral şəklində çap edilir.

Kodlara daha rahat şəkildə aşağıdakı github linkindən baxa və ya yükləyə bilərsiniz:

https://github.com/mmushfiq/SpiralMatrixConsole 

 

Bu məqalə də bu qədər. Ümid edirəm maraqlı olmuşdur 🙂

About the author

Mushfiq Mammadov