Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में न्यूनतम नाइट मूव्स


मान लीजिए कि हमारे पास एक अनंत शतरंज की बिसात है जिसमें -infinity से +infinity तक के निर्देशांक हैं, और हमारे पास वर्ग [0, 0] पर एक नाइट है। एक शूरवीर के पास 8 संभावित चालें हैं, जैसा कि नीचे दिखाया गया है। प्रत्येक चाल एक कार्डिनल दिशा में दो वर्ग है, फिर एक वर्ग एक ओर्थोगोनल दिशा में है।

C++ में न्यूनतम नाइट मूव्स

हमें नाइट को वर्ग [x, y] में ले जाने के लिए आवश्यक न्यूनतम चरणों की संख्या ज्ञात करनी होगी। यह गारंटी है कि उत्तर मौजूद है।

तो अगर इनपुट x =5 और y =5 जैसा है, तो आउटपुट 4 होगा। यह [0,0] → [2,1] → [4,2] → [3,4] → [ जैसा होगा। 5,5]

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • नक्शा परिभाषित करें मी

  • हल () नामक एक विधि को परिभाषित करें, इसमें x और y लगेंगे

  • यदि x + y =0 है, तो 0 लौटाएँ, यदि x + y =2 है, तो 2 लौटाएँ

  • (x, y)

    . का उपयोग करके एक जोड़ी अस्थायी बनाएं
  • यदि m में युग्म अस्थायी है, तो m[temp]

  • वापसी m[temp] :=मिनट का हल (|x - 1|, |y - 2|)), [हल करें(|x - 2|, |y - 1|)) + 1]

  • मुख्य विधि से, हल (|x|, |y|) को कॉल करें, और उसका मान वापस करें

उदाहरण (C++)

एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   map < pair <int, int>, int > dp;
   int solve(int x, int y){
      if(x + y == 0) return 0;
      if (x + y == 2) return 2;
      pair <int, int> temp({x, y});
      if(dp.count(temp)) return dp[temp];
      return dp[temp] = min(solve(abs(x - 1), abs(y - 2)), solve(abs(x - 2), abs(y - 1))) + 1;
   }
   int minKnightMoves(int x, int y) {
      return solve(abs(x), abs(y));
   }
};
main(){
   Solution ob;
   cout << (ob.minKnightMoves(5, 5));
}

इनपुट

5
5

आउटपुट

4

  1. C++ में बाइनरी ट्री की न्यूनतम गहराई

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उस वृक्ष की न्यूनतम गहराई ज्ञात करनी है। जैसा कि हम जानते हैं कि न्यूनतम गहराई रूट नोड से निकटतम लीफ नोड तक सबसे छोटे पथ के साथ नोड्स की संख्या है। तो, अगर इनपुट पसंद है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - ट्री नोड्स

  1. C++ . में शतरंज की बिसात में नाइट की संभाव्यता

    मान लीजिए कि हमारे पास एक NxN शतरंज की बिसात है, एक शूरवीर r-वें पंक्ति और c-वें स्तंभ से शुरू होता है और ठीक K चाल चलने का प्रयास करता है। यहां पंक्तियों और स्तंभों को 0 अनुक्रमित किया गया है, इसलिए शीर्ष-बाएं वर्ग (0, 0) है, और निचला-दायां वर्ग (N-1, N-1) है। एक शूरवीर एक सेल से 8 अलग-अलग कोशिकाओ

  1. C++ का उपयोग करके सभी तत्वों को समान बनाने के लिए चालों की न्यूनतम संख्या।

    समस्या कथन N तत्वों की एक सरणी और एक पूर्णांक K को देखते हुए, इसे दिए गए सरणी पर किसी भी संख्या में निम्नलिखित ऑपरेशन करने की अनुमति है - Kवें . डालें सरणी के अंत में तत्व और सरणी के पहले तत्व को हटा दें। कार्य सरणी के सभी तत्वों को समान बनाने के लिए आवश्यक न्यूनतम संख्या में चालों को खोजना ह