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

सी ++ में जितना संभव हो सके भूमि से दूर

मान लीजिए कि हमारे पास एक एन एक्स एन ग्रिड है जिसमें केवल 0 और 1 जैसे मान हैं, जहां 0 पानी का प्रतिनिधित्व करता है और 1 भूमि का प्रतिनिधित्व करता है, हमें एक जल सेल ढूंढना होगा जैसे कि निकटतम भूमि सेल से इसकी दूरी अधिकतम हो और दूरी वापस कर दें। यहां हम मैनहट्टन दूरी का उपयोग करेंगे - दो कोशिकाओं (x0, y0) और (x1, y1) के बीच की दूरी |x0 - x1| + |y0 - y1|। यदि ग्रिड में कोई भूमि या पानी मौजूद नहीं है, तो वापसी -1.

1 0 1
0 0 0
1 0 1

तब आउटपुट 2 होगा, क्योंकि सेल (1,1) दूरी 2 के साथ सभी भूमि से यथासंभव दूर है।

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

  • डीआईआर:=[(1, 0), (-1, 0), (1, -1), (1, 1), (-1, 1), (-1, -1), (0, 1) , (0, -1)]

  • dir2 :=[(1, 0), (-1, 0), (0, 1), (0, -1)]

  • मानचित्र को परिभाषित करें एम. एक कतार q को परिभाषित करें। n :=पंक्ति गणना और c :=स्तंभ गणना

  • मैं के लिए 0 से n - 1 की सीमा में

    • j के लिए 0 से n - 1 की सीमा में

      • अगर ग्रिड [i, j] 1 है, तो q में एक युग्म (i, j) डालें और m[(i, j)] डालें:=(j ,i)

  • रिट :=-1

  • जबकि q खाली नहीं है

    • sz :=q का आकार

    • जबकि sz 0 नहीं है

      • अस्थायी:=q का पहला तत्व, q से पहला तत्व हटाएं

      • k के लिए 0 से 3 की सीमा में -

        • nx :=temp + dir2[k, 0]

          . का पहला मान
        • ny:=अस्थायी का दूसरा मान + dir2[k, 1]

        • यदि nx और ny ग्रिड की सीमा में नहीं हैं, या grid[nx, ny] 1 है, तो अगले पुनरावृत्ति पर जाएं।

        • एम [(एनएक्स, एनवाई)]:=एम [अस्थायी]

        • ret :=अधिकतम ((nx, ny) और m(temp) की दूरी) और ret

        • q में (nx, ny) डालें

        • ग्रिड सेट करें [एनएक्स, एनवाई]:=1

      • sz को 1 से घटाएं

  • वापसी रिट

उदाहरण(C++)

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

#include <bits/stdc++.h>
using namespace std;
int dir[8][2] = {
   {1, 0}, {-1, 0}, {1, -1}, {1, 1},
   {-1, 1}, {-1, -1}, {0, 1}, {0, -1}
};
int dir2[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
class Solution {
   public:
   int calcDist(int x1, int y1, int x2, int y2){
      return abs(x1 - x2) + abs(y1 - y2);
   }
   int maxDistance(vector<vector<int>>& grid) {
      map < pair <int, int>, pair <int, int> > m;
      queue < pair <int, int> > q;
      int n = grid.size();
      int c = n? grid[0].size() : 0;
      for(int i = 0; i < n; i++){
         for(int j = 0; j < c; j++){
            if(grid[i][j] == 1){
               q.push({i, j});
               m[{i, j}] = {i, j};
            }
         }
      }
      int ret = -1;
      while(!q.empty()){
         int sz = q.size();
         while(sz--){
            pair <int, int> temp = q.front();
            q.pop();
            for(int k = 0; k < 4; k++){
               int nx = temp.first + dir2[k][0];
               int ny = temp.second + dir2[k][1];
               if(nx < 0 || ny < 0 || nx >= n || ny >= c || grid[nx][ny]) continue;
               m[{nx, ny}] = m[temp];
               ret = max(calcDist(nx, ny, m[temp].first,
               m[temp].second), ret);
               q.push({nx, ny});
               grid[nx][ny] = 1;
            }
         }
      }
      return ret;
   }
};
main(){
   vector<vector<int>> v1 = {{1,0,1},{0,0,0},{1,0,1}};
   Solution ob;
   cout << (ob.maxDistance(v1));
}

इनपुट

["alice,20,800,mtv","bob,50,1200,mtv"]

आउटपुट

2

  1. सी ++ में static_cast

    static_cast का उपयोग सामान्य/साधारण प्रकार के रूपांतरण के लिए किया जाता है। यह निहित प्रकार के जबरदस्ती के लिए जिम्मेदार कलाकार भी है और इसे स्पष्ट रूप से भी कहा जा सकता है। आपको इसका उपयोग फ्लोट को इंट, चार से इंट आदि में बदलने जैसे मामलों में करना चाहिए। यह संबंधित प्रकार की कक्षाओं को कास्ट कर सक

  1. C++ फ़ंक्शन से एकाधिक मान लौटाना

    C या C++ में, हम सीधे किसी फंक्शन से कई मान नहीं लौटा सकते। इस खंड में हम देखेंगे कि किसी फ़ंक्शन से एक से अधिक मान वापस करने के लिए किसी ट्रिक का उपयोग कैसे करें। हम कॉल बाय एड्रेस या कॉल बाय रेफरेंस नामक विधि का उपयोग करके एक फ़ंक्शन से एक से अधिक मान वापस कर सकते हैं। इनवॉकर फ़ंक्शन में हम परिणा

  1. सी ++ में किसी फ़ंक्शन से सरणी कैसे वापस करें?

    सी ++ पूरे सरणी को वापस नहीं करता है लेकिन यह पॉइंटर को सरणी में वापस कर सकता है। फ़ंक्शन के बाहर, स्थानीय चर का पता वापस नहीं किया जा सकता है। स्थानीय चर को स्थिर बनाकर, यह स्थानीय चर का पता वापस कर सकता है। पॉइंटर वापस करने के लिए सिंटैक्स निम्नलिखित है। int * function_name() { body } यहां, fun