Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Langkah-langkah pelaksanaan algoritma Eight Queens Problem dalam PHP

Langkah-langkah pelaksanaan algoritma Eight Queens Problem dalam PHP

WBOY
WBOYasal
2023-07-07 18:51:07786semak imbas

Langkah-langkah untuk melaksanakan algoritma masalah lapan ratu dalam PHP

Pengenalan:
Masalah lapan ratu adalah masalah terkenal yang melanda bidang sains komputer Ia memerlukan meletakkan lapan ratu pada papan catur 8x8 supaya tiada dua ratu boleh berinteraksi dengan setiap satu lain-lain. Artikel ini akan memberikan langkah algoritma untuk melaksanakan Masalah Lapan Ratu dalam PHP, dan melampirkan contoh kod.

1. Analisis Masalah
Masalah Eight Queens boleh dianggap sebagai masalah backtracking biasa. Pada papan catur 8x8, hanya seorang ratu boleh diletakkan dalam setiap baris dan ratu dalam setiap baris tidak boleh berada dalam lajur, baris atau pepenjuru yang sama seperti ratu dalam baris lain.

2. Langkah pelaksanaan algoritma

  1. Memulakan papan catur: Buat tatasusunan dua dimensi 8x8 sebagai papan catur, dan mulakan semua elemennya kepada 0, menunjukkan bahawa ratu belum diletakkan pada kedudukan semasa.
  2. Algoritma penjejakan belakang: Bermula dari baris pertama, cuba letakkan baris ratu demi baris. Untuk setiap baris, cuba letakkan ratu pada setiap lajur dan semak sama ada syarat untuk tidak diserang dipenuhi. Jika syarat dipenuhi, teruskan secara rekursif untuk meletakkan ratu di baris seterusnya. Jika syarat tidak dipenuhi, kembali ke baris sebelumnya dan cuba lagi dalam kedudukan lain.
  3. Syarat tamat: Apabila semua ratu berjaya diletakkan di papan catur, penyelesaian diperoleh. Penjejakan ke belakang tamat apabila semua baris telah dicuba tanpa penyelesaian.

3. Contoh kod PHP
Berikut ialah contoh kod yang menggunakan PHP untuk melaksanakan algoritma Eight Queens Problem:

<?php

class EightQueens {
    private $board; // 棋盘
    private $solutions; // 存放所有解的数组

    public function __construct() {
        $this->board = array_fill(0, 8, array_fill(0, 8, 0));
        $this->solutions = array();
    }

    public function solve() {
        $this->placeQueen(0);
        return $this->solutions;
    }

    private function placeQueen($row) {
        if ($row == 8) {
            $this->solutions[] = $this->board;
            return;
        }

        for ($col = 0; $col < 8; $col++) {
            if ($this->isSafe($row, $col)) {
                $this->board[$row][$col] = 1; // 放置皇后

                // 递归放置下一行的皇后
                $this->placeQueen($row + 1);

                $this->board[$row][$col] = 0; // 回溯
            }
        }
    }

    private function isSafe($row, $col) {
        // 检查当前列是否已有皇后
        for ($i = 0; $i < $row; $i++) {
            if ($this->board[$i][$col] == 1) {
                return false;
            }
        }

        // 检查左上对角线是否有皇后
        $i = $row - 1;
        $j = $col - 1;
        while ($i >= 0 && $j >= 0) {
            if ($this->board[$i][$j] == 1) {
                return false;
            }
            $i--;
            $j--;
        }

        // 检查右上对角线是否有皇后
        $i = $row - 1;
        $j = $col + 1;
        while ($i >= 0 && $j < 8) {
            if ($this->board[$i][$j] == 1) {
                return false;
            }
            $i--;
            $j++;
        }

        return true;
    }
}

// 使用示例
$eightQueens = new EightQueens();
$solutions = $eightQueens->solve();

foreach ($solutions as $solution) {
    foreach ($solution as $row) {
        echo implode(" ", $row) . "
";
    }
    echo "
";
}

Kod di atas melaksanakan penyelesaian Masalah Eight Queens melalui algoritma backtracking. Selepas menjalankan program, semua penyelesaian yang memenuhi syarat akan dikeluarkan Setiap penyelesaian diwakili oleh tatasusunan dua dimensi, di mana 1 mewakili kedudukan ratu.

Kesimpulan:
Artikel ini memperkenalkan langkah algoritma untuk melaksanakan Masalah Lapan Ratu dalam PHP, dan melampirkan contoh kod yang sepadan. Melalui algoritma ini, kita boleh mencari semua penyelesaian yang memenuhi syarat, iaitu meletakkan lapan ratu pada papan catur 8x8 supaya tiada dua ratu boleh menyerang antara satu sama lain. Algoritma backtracking ialah kaedah biasa untuk menyelesaikan masalah Eight Queens dan juga digunakan secara meluas dalam masalah lain yang serupa.

Atas ialah kandungan terperinci Langkah-langkah pelaksanaan algoritma Eight Queens Problem dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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