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

लक्ष्य तक पहुँचने के लिए न्यूनतम संख्या में घूंसे खोजने के लिए C++ प्रोग्राम की आवश्यकता होती है

मान लीजिए हमारे पास एक मैट्रिक्स है जिसमें एच पंक्तियां और डब्ल्यू कॉलम हैं। कोशिकाओं में या तो '.' होता है। या '#'। बिन्दु '।' निष्क्रिय स्थान को इंगित करता है, और '#' ब्लॉक को इंगित करता है। अमल अपने घर से बाजार जाएगा। उसका घर ऊपरी-बाएँ कोने में कोठरी में है, और बाज़ार नीचे-दाएँ कोने में है। अमल एक सेल को ऊपर, नीचे, बाएँ या दाएँ एक निष्क्रिय सेल में ले जा सकता है। वह शहर नहीं छोड़ सकता। वह अवरुद्ध सेल में भी प्रवेश नहीं कर सकता है। हालाँकि, उसकी शारीरिक शक्ति उसे एक पंच के साथ अपनी पसंद के 2×2 कोशिकाओं के साथ एक वर्ग क्षेत्र में सभी ब्लॉकों को नष्ट करने की अनुमति देती है, जिससे ये कोशिकाएं निष्क्रिय हो जाती हैं। अमल के लिए बाजार तक पहुंचने के लिए हमें कम से कम घूंसे की जरूरत है।

तो, अगर इनपुट पसंद है

. . # . .
# . # . #
# # . # #
# . # . #
. . # . .

तो आउटपुट 1 होगा, क्योंकि हम ग्रिड को −

. जैसा बना सकते हैं
. . # . .
# . . . #
# # . . #
# . # . #
. . # . .

चिह्नित बक्सों को नष्ट करके

कदम

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

n := row count of matrix
m := column count of matrix
Define one 2D array dist of order (n + 1) x (m + 1)
Define one deque dq
insert ( 0, 0 ) at the beginning of dq
dist[0, 0] := 0
while (not dq is empty), do:
   v := first element of dq
   delete front element from dq
   for initialize i := 0, when i < 4, update (increase i by 1), do:
      x := dx[i] + v[0]
      y := dy[i] + v[1]
      if x >= 0 and x < n and y >= 0 and y < m, then:
         if matrix[x, y] is same as '.', then:
            if dist[x, y] > dist[v[0], v[1]], then:
               dist[x, y] := dist[v[0], v[1]]
               insert pair { x, y } at the beginning of dq
         Otherwise
            for initialize p := x - 1, when p <= x + 1, update (increase p by 1), do:
               for initialize q := y - 1, when q <= y + 1, update (increase q by 1), do:
                  if p >= 0 and p < n and q >= 0 and q < m, then:
                     if dist[p, q] > dist[v[0], v[1]] + 1, then:
                        dist[p, q] := dist[v[0], v[1]] + 1
                        insert pair { p, q } at the end of dq
return dist[n - 1, m - 1]
के अंत में

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;

int dx[4] = { 0, 0, -1, 1 };
int dy[4] = { -1, 1, 0, 0 };

int solve(vector<vector<char>> matrix){
   int n = matrix.size();
   int m = matrix[0].size();
   vector<vector<int>> dist(n + 1, vector<int>(m + 1, 1e9));
   deque<array<int, 2>> dq;
   dq.push_front({ 0, 0 });
   dist[0][0] = 0;
   while (!dq.empty()){
      auto v = dq.front();
      dq.pop_front();
      for (int i = 0; i < 4; i++){
         int x = dx[i] + v[0], y = dy[i] + v[1];
         if (x >= 0 && x < n && y >= 0 && y < m){
            if (matrix[x][y] == '.'){
               if (dist[x][y] > dist[v[0]][v[1]]){
                  dist[x][y] = dist[v[0]][v[1]];
                  dq.push_front({ x, y });
               }
            } else{
               for (int p = x - 1; p <= x + 1; p++){
                  for (int q = y - 1; q <= y + 1; q++){
                     if (p >= 0 && p < n && q >= 0 && q < m){
                        if (dist[p][q] > dist[v[0]][v[1]] + 1){
                           dist[p][q] = dist[v[0]][v[1]] + 1;
                           dq.push_back({ p, q });
                        }
                     }
                  }
               }
            }
         }
      }
   }
   return dist[n - 1][m - 1];
}
int main(){
   vector<vector<char>> matrix = { { '.', '.', '#', '.', '.' }, { '#', '.', '#', '.', '#' }, { '#', '#', '.', '#', '#' }, { '#', '.', '#', '.', '#' }, { '.', '.', '#', '.', '.' } };
   cout << solve(matrix) << endl;
}

इनपुट

{ { '.', '.', '#', '.', '.' }, { '#', '.', '#', '.', '#' },
{ '#', '#', '.', '#', '#' }, { '#', '.', '#', '.', '#' }, {
'.', '.', '#', '.', '.' } }

आउटपुट

1

  1. C++ में कुल n बनाने के लिए आवश्यक अक्षरों की न्यूनतम संख्या।

    समस्या कथन एक पूर्णांक n दिया गया है और a =1, b =2, c =3, ….., z =26 दें। कार्य कुल n बनाने के लिए आवश्यक अक्षरों की न्यूनतम संख्या ज्ञात करना है If n = 23 then output is 1 If n = 72 then output is 3(26 + 26 + 20) एल्गोरिदम 1. If n is divisible by 26 then answer is (n/26) 2. If n is not divisible b

  1. C++ प्रोग्राम ग्राफ़ को डिस्कनेक्ट करने के लिए काटने के लिए किनारों की न्यूनतम संख्या खोजने के लिए

    इस कार्यक्रम में हमें एक ग्राफ की एज कनेक्टिविटी को खोजने की जरूरत है। ग्राफ़ के ग्राफ़ की एक एज कनेक्टिविटी का अर्थ है कि यह एक पुल है, इसे हटाने से ग्राफ़ डिस्कनेक्ट हो जाएगा। डिस्कनेक्ट किए गए अप्रत्यक्ष ग्राफ़ में पुल को हटाने के साथ जुड़े घटकों की संख्या बढ़ जाती है। कार्य और छद्म कोड Begin &nb

  1. पायथन में अंतिम लक्ष्य तक पहुँचने के लिए आवश्यक न्यूनतम संख्या में बसें खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक n x 3 मैट्रिक्स है जहां प्रत्येक पंक्ति में तीन फ़ील्ड हैं [src, dest, id] इसका मतलब है कि बस में src से dest तक का मार्ग है। नई बस में चढ़ने में एक यूनिट पैसा लगता है, लेकिन अगर हम एक ही बस में रहते हैं तो हमें एक यूनिट ही देना पड़ता है। हमें बस को स्थान 0 से अंतिम पड़ाव (