Sel yang dapat diakses

Sel yang dapat diakses

> Pemrograman

Algoritma ini bertujuan untuk menemukan sel yang dapat dijangkau oleh daun bawang mulai dari sel tertentu dan jumlah PM.

Ini menghasilkan fungsi yang mengambil sel dan angka sebagai parameter, dan yang akan mengembalikan array sel.

Jika Anda diberi tahu tentang fungsi "getAccessibleCells" atau "getReachableCells", atau nama serupa lainnya, Anda sekarang akan tahu apa itu.

Menggunakan

Dari saat Anda ingin merencanakan perjalanan Anda, fungsi ini akan sangat penting.

Mengetahui sel di mana Anda bisa pergi memungkinkan Anda, misalnya, untuk memilih sel di mana Anda akan menderita kerusakan paling sedikit, atau untuk melihat ke mana Anda bisa bergerak untuk menimbulkan kerusakan pada lawan Anda.

Algoritma ini terutama digunakan dalam algoritma Cache-cache (Le cache-cache).

Metode pertama

Prinsip

Dengan sendirinya, cukup sederhana untuk mengimplementasikan cara agar sel dapat diakses. Metode paling sederhana adalah menguji jarak ke setiap sel pada peta menggunakan getPathLength.

Namun fungsi ini memiliki biaya operasional yang tinggi. Jadi gunakan di setiap sel peta... Konsumsi operasi Anda akan meroket.

Solusi yang sedikit lebih cerdas adalah pertama-tama temukan sel dalam jangkauan PM, lalu periksa apakah sel tersebut dapat dijangkau melalui getPathLength.

Jika kedua solusi ini layak, mereka memiliki biaya operasi yang cepat menjadi tinggi.

Jika Anda seorang pemula dan solusi yang akan kita bahas berikut ini masih tampak agak rumit, jangan ragu untuk memilih solusi ini terlebih dahulu. Di awal permainan, Anda tidak perlu melakukan banyak perhitungan, dan pada level rendah, Anda tidak akan memiliki MP dalam jumlah besar. Jadi, Anda dapat menggunakan solusi ini.

Masalah

Membuat sel Anda dapat diakses melalui metode ini tidak akan merepotkan.

Tapi masalah pertama muncul ketika jumlah PM Anda meningkat. Semakin tinggi dia mendaki, semakin banyak kotak yang akan diuji, tentu saja. Dalam kasus terburuk, jika Anda menjalankan seluruh peta dengan getPathLength, Anda akan berakhir dengan tagihan sekitar 4 juta operasi, "hanya".

Cukup dikatakan bahwa ini sangat mengurangi operasi yang tersedia untuk algoritme lain seperti Combo, atau Peta Kerusakan.

Dan itu belum semuanya! Ada masalah lain: Anda tidak sendirian dalam pertarungan. Anda pasti perlu mendapatkan sel yang dapat diakses lawan untuk dapat melindungi diri dari serangan mereka. Dan jika berbagai daun bawang mulai memanggil umbi, itu bahkan lebih banyak sel yang harus dihitung.

Singkatnya, jika Anda mulai ingin menghitung sel yang dapat diakses dari semua dunia kecil ini dengan metode ini, Anda akan dikenakan biaya lebih dari satu lengan.

Jadi, kami menggunakan metode lain, jauh lebih efektif: Pergi dari tetangga ke tetangga!

Metode tetangga

Prasyarat

Pertama, apa itu "tetangga"? Tetangga sel hanyalah sel yang berdekatan dengannya. Dan kita jelas berbicara tentang sel yang memiliki sisi yang sama, sel yang berada tepat di sebelahnya, dan bukan yang diagonal.

Dengan demikian, sel-sel yang berada di pojok peta memiliki satu tetangga. Sel di tepi memiliki dua. Dan yang lainnya memiliki empat.

Hal pertama yang perlu Anda ketahui bagaimana melakukannya adalah mengambil sel tetangga. Dengan menggunakan fungsi getCellX, getCellY dan getCellFromXY, Anda dapat dengan mudah menentukan tetangga terkenal ini.

Setelah Anda dapat mengambil tetangga sel, Anda perlu menentukan apakah sel itu "lumayan". Jelas, jika sel itu menjadi penghalang atau daun bawang ada di sana, daun bawang Anda tidak akan bisa bergerak di atasnya.

Untuk mengetahui hal ini, Anda memerlukan fungsi isObstacle, isEmptyCell, isLeek atau getCellContent.

Prinsip

Prinsipnya sebenarnya cukup sederhana. Meskipun belum tentu mudah untuk diatur bagi seorang pemula dalam pemrograman.

Oleh karena itu daun bawang Anda ada di sel, dan memiliki sejumlah MP tertentu untuk dipindahkan. Sel tempat ia berada berada pada jarak 0 PM; Sejauh ini bagus...

Jika daun bawang Anda memiliki 1 MP, kemana ia bisa bergerak? Nah, di tetangga bebas sel awalnya.

Bagaimana jika dia memiliki 2 MP? Oleh karena itu, ia dapat bergerak selama 1 PM pada tetangga bebas sel awalnya. Tetapi juga, untuk 2 PM, pada tetangga bebas dari tetangga bebas sel awal.

Dan seterusnya...

<img src="https://i.ibb.co/7jdzBZr/Tuto-Cell-Accessible-Iteration.gif" alt="Tuto-Cell-Dapat Diakses -Iterasi" bor