Permainan sambung nombor dalam C/C++?

WBOY
Lepaskan: 2023-09-18 08:41:02
ke hadapan
840 orang telah melayarinya

Permainan sambung nombor dalam C/C++?

Permainan - Katakan terdapat susunan n × n segi empat sama. Antaranya, beberapa petak kosong, ada yang pepejal, dan beberapa petak tidak pepejal ditetapkan oleh integer 1, 2, 3,... Setiap integer memegang atau menduduki betul-betul dua petak berbeza pada papan. Tugas pemain adalah untuk menyambungkan dua kejadian setiap integer di papan dengan bantuan laluan mudah yang hanya melaksanakan pergerakan mendatar dan menegak. Dua laluan berbeza tidak dibenarkan bersilang antara satu sama lain. Tiada laluan boleh mengandungi sebarang blok pepejal (blok pepejal tidak dibenarkan pada mana-mana laluan). Akhir sekali, semua petak bukan pepejal mesti diisi dengan laluan.

Algoritma - Untuk membina teka-teki rawak yang cekap dengan saiz papan n × n yang diberikan, kami mula-mula menjana laluan mudah rawak yang saling berpisah pada papan hitam. Jika beberapa blok terpencil masih berada di luar semua laluan yang dijana, tandakan blok terpencil ini sebagai pepejal (dilarang). Seterusnya, kami menyediakan titik akhir laluan dan senarai petak pepejal sebagai teka-teki.

Jadi kami mula-mula menjana penyelesaian dan kemudian mengira teka-teki berdasarkan penyelesaian itu. Laluan dan petak pepejal memisahkan n × n plat. Kami melaksanakan dan mencari struktur data untuk menjana partition ini. Struktur data mengendalikan subset set n^2 petak pada papan catur.

Pseudokod

  • Kedudukan petak (a, b) dan (c, d) secara rawak pada papan catur, supaya -

    • (a, b) dan (c, d) adalah berjiran antara satu sama lain, Dan

    • (a, b) mahupun (c, d) tidak tergolong dalam mana-mana laluan yang dijana setakat ini. jika dalam Seluruh papan, mengembalikan GAGAL /* Di sini, (a​​, b) dan (c, d) ialah dua petak pertama di laluan baharu menubuhkan. */

  • Kesatuan dua pokok pencarian kesatuan, yang mengandungi (a, b) dan (c, d).

  • Ulang sehingga laluan semasa boleh dipanjangkan -

      Namakan semula (a, b) = (c, d).

  • Cari petak bersebelahan secara rawak (c, d) (a, b) supaya -

    • (c, d) tidak tergolong dalam mana-mana laluan yang dijana setakat ini (termasuk laluan semasa)

    • Satu-satunya jiran (c, d) pada laluan semasa pembinaan separa ialah (a, b).

  • Jika tiada jiran sedemikian (c,d) ditemui, laluan itu tidak boleh dipanjangkan lagi, sekali gus memutuskan kitaran

  • Jika tidak, kedua-dua (a, b) dan (c, d) adalah milik dan cari pokok itu.

  • Tetapkan bendera titik akhir bagi dua blok yang terletak di permulaan dan penghujung laluan baharu.

  • Kembali kepada KEJAYAAN

  • Atas ialah kandungan terperinci Permainan sambung nombor dalam C/C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:tutorialspoint.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan