"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > बैकट्रैकिंग का उपयोग करके आठ रानियों की समस्या का समाधान

बैकट्रैकिंग का उपयोग करके आठ रानियों की समस्या का समाधान

2024-11-02 को प्रकाशित
ब्राउज़ करें:671

आठ रानियों की समस्या शतरंज की बिसात पर प्रत्येक पंक्ति में एक रानी को रखने का समाधान ढूंढना है ताकि कोई भी दो रानियां एक-दूसरे पर हमला न कर सकें। समस्या को रिकर्सन का उपयोग करके हल किया जा सकता है। इस अनुभाग में, हम इस समस्या को हल करने के लिए बैकट्रैकिंग नामक एक सामान्य एल्गोरिदम डिज़ाइन तकनीक पेश करेंगे। बैकट्रैकिंग दृष्टिकोण क्रमिक रूप से एक उम्मीदवार समाधान की खोज करता है, जैसे ही यह निर्धारित होता है कि उस विकल्प को छोड़ देता है
उम्मीदवार संभवतः एक वैध समाधान नहीं हो सकता है, और फिर एक नए उम्मीदवार की तलाश करता है।

आप शतरंज की बिसात को दर्शाने के लिए द्वि-आयामी सरणी का उपयोग कर सकते हैं। हालाँकि, चूँकि प्रत्येक पंक्ति में केवल एक रानी हो सकती है, पंक्ति में रानी की स्थिति को दर्शाने के लिए एक-आयामी सरणी का उपयोग करना पर्याप्त है। इस प्रकार, आप क्वीन सरणी को इस प्रकार परिभाषित कर सकते हैं:

int[] क्वीन्स = नया int[8];

j को queens[i] को यह दर्शाने के लिए असाइन करें कि एक रानी को पंक्ति i और कॉलम j में रखा गया है। नीचे दिया गया चित्र (ए) नीचे दिए गए चित्र (बी) में शतरंज की बिसात के लिए क्वीन सरणी की सामग्री दिखाता है।

Image description

खोज पहली पंक्ति से k = 0 के साथ शुरू होती है, जहां k वर्तमान पंक्ति का सूचकांक माना जा रहा है। एल्गोरिदम जाँचता है कि क्या इस क्रम में _j = 0, 1, ..., 7 के लिए पंक्ति में j_वें कॉलम में एक रानी को संभवतः रखा जा सकता है। खोज इस प्रकार कार्यान्वित की गई है:

  • सफल होने पर, यह अगली पंक्ति में रानी के लिए स्थान की तलाश जारी रखता है। यदि वर्तमान पंक्ति अंतिम पंक्ति है, तो एक समाधान मिल जाता है।
  • यदि सफल नहीं होता है, तो यह पिछली पंक्ति पर वापस चला जाता है और पिछली पंक्ति में अगले कॉलम में एक नए स्थान की खोज जारी रखता है।
  • यदि एल्गोरिदम पहली पंक्ति में पीछे चला जाता है और इस पंक्ति में रानी के लिए कोई नया स्थान नहीं ढूंढ पाता है, तो कोई समाधान नहीं पाया जा सकता है।

नीचे दिया गया कोड वह प्रोग्राम देता है जो आठ क्वींस समस्या का समाधान प्रदर्शित करता है।

package application;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;

public class EightQueens extends Application {
    public static final int SIZE = 8; // The size of the chess board
    // queens are placed at (i, queens[i])
    // -1 indicates that no queen is currently placed in the ith row
    // Initially, place a queen at (0, 0) in the 0th row
    private int[] queens = {-1, -1, -1, -1, -1, -1, -1, -1};

    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {
        search(); // Search for a solution

        // Display chess board
        GridPane chessBoard = new GridPane();
        chessBoard.setAlignment(Pos.CENTER);
        Label[][] labels = new Label[SIZE][SIZE];
        for(int i = 0; i = 0 && k 



कार्यक्रम समाधान खोजने के लिए search() (पंक्ति 20) को आमंत्रित करता है। प्रारंभ में, किसी भी रानियों को किसी भी पंक्ति में नहीं रखा गया है (पंक्ति 16)। खोज अब पहली पंक्ति से k = 0 (पंक्ति 53) से शुरू होती है और रानी (पंक्ति 56) के लिए जगह ढूंढती है। सफल होने पर, इसे पंक्ति (पंक्ति 61) में रखें और अगली पंक्ति (पंक्ति 62) पर विचार करें। यदि सफल नहीं हुआ, तो पिछली पंक्ति (पंक्तियाँ 58-59) पर वापस जाएँ।

findPosition(k) विधि k पंक्ति में रानी को रखने के लिए संभावित स्थिति की खोज करती है, जो queen[k] 1 (पंक्ति 73) से शुरू होती है। . यह जांचता है कि क्या क्वीन को start, start 1, पर रखा जा सकता है। . . , और 7, इस क्रम में (पंक्तियाँ 75-78)। यदि संभव हो, तो कॉलम इंडेक्स (पंक्ति 77) लौटाएं; अन्यथा, वापस लौटें -1 (पंक्ति 80)।

isValid(row, column) विधि को यह जांचने के लिए बुलाया जाता है कि रानी को निर्दिष्ट स्थान पर रखने से पहले रखी गई रानियों के साथ टकराव होता है (पंक्ति 76)। यह सुनिश्चित करता है कि कोई भी रानी एक ही कॉलम (पंक्ति 86), ऊपरी-बाएँ विकर्ण (पंक्ति 87), या ऊपरी-दाएँ विकर्ण (पंक्ति 88) में नहीं रखी गई है, जैसा कि नीचे चित्र में दिखाया गया है।

Image description

विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: https://dev.to/paulike/solving-the-eite-queens-problem-using-backtracking-25cc?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3