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

C++ . में बस रूट

मान लीजिए हमारे पास बस मार्गों की एक सूची है। प्रत्येक मार्ग में [i] एक बस मार्ग है जिसे i-th बस हमेशा के लिए दोहराती है। इसलिए, यदि मार्ग [0] =[1, 5, 7], इसका मतलब है कि पहली बस (0-वें अनुक्रमित) अनुक्रम 1, 5, 7, 1, 5, 7, 1, ... हमेशा के लिए यात्रा करती है ।

अब मान लीजिए कि हम बस स्टॉप S से शुरू करते हैं, शुरू में बस से नहीं, और हम बस स्टॉप T पर जाना चाहते हैं। हमें अपने गंतव्य तक पहुंचने के लिए कम से कम बसों की संख्या ज्ञात करनी होगी? अगर यह संभव नहीं है तो -1 लौटें।

तो अगर इनपुट [[1,2,8], [3,6,8]], और एस =1, टी =6 जैसा है, तो आउटपुट 2 होगा। तो, बस स्टॉप 7 के लिए पहली बस लें, फिर बस स्टॉप 6 के लिए दूसरी बस लें।

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

  • एक मानचित्र को परिभाषित करें मी
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • इनिशियलाइज़ j :=0 के लिए, जब j
  • m के अंत में i डालें[r[i, j]]
  • एक कतार q को परिभाषित करें, S को q में डालें
  • यदि S, T के समान है, तो −
    • वापसी 0
  • विज़िट नामक एक सेट को परिभाषित करें
  • इनिशियलाइज़ lvl के लिए :=1, जब q खाली न हो, तो अपडेट करें (lvl को 1 से बढ़ाएँ), करें -
    • sz :=q का आकार
    • जबकि sz गैर-शून्य है, करें −
      • नोड:=q का पहला तत्व, q से तत्व हटाएं
      • इनिशियलाइज़ i :=0 के लिए, जब i
      • मार्ग:=m[नोड, i]
      • यदि मार्ग का दौरा किया गया है, तो −
        • निम्न भाग पर ध्यान न दें, अगले भाग पर जाएं
      • विज़िट में रूट डालें
      • इनिशियलाइज़ j :=0 के लिए, जब j करें
      • रोकें:=r[मार्ग, j]
      • यदि स्टॉप टी के समान है, तो −
        • लौटें lvl
    • क्यू में स्टॉप डालें
  • sz को 1 से घटाएं
  • वापसी -1
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int numBusesToDestination(vector<vector<int>>& r, int S, int T) {
          unordered_map <int, vector <int> > m;
          for(int i = 0; i < r.size(); i++){
             for(int j = 0; j < r[i].size(); j++){
                m[r[i][j]].push_back(i);
             }
          }
          queue <int> q;
          q.push(S);
          if(S == T) return 0;
          unordered_set <int> visited;
          for(int lvl = 1; !q.empty(); lvl++){
             int sz = q.size();
             while(sz--){
                int node = q.front();
                q.pop();
                for(int i = 0; i < m[node].size(); i++){
                   int route = m[node][i];
                   if(visited.count(route)) continue;
                   visited.insert(route);
                   for(int j = 0; j < r[route].size(); j++){
                      int stop = r[route][j];
                      if(stop == T) return lvl;
                      q.push(stop);
                   }
                }
             }
          }
          return -1;
       }
    };
    main(){
       Solution ob;
       vector<vector<int>> v = {{1,2,8}, {3,6,8}};
       cout << (ob.numBusesToDestination(v, 1, 6));
    }

    इनपुट

    {{1,2,8}, {3,6,8}}
    1
    6

    आउटपुट

    2

    1. सी ++ में प्रक्रिया को मारें

      मान लीजिए कि हमारे पास n प्रक्रियाएं हैं, यहां प्रत्येक प्रक्रिया की एक विशिष्ट आईडी होती है जिसे PID या प्रक्रिया आईडी कहा जाता है और उसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रक्रिया में केवल एक पैरेंट प्रक्रिया होती है, लेकिन इसमें एक या अधिक चाइल्ड प्रक्रियाएं हो सकती हैं। यह एक प

    1. सी ++ में गिलहरी सिमुलेशन

      एक पेड़, एक गिलहरी, और कई नट हैं। स्थितियों को 2डी ग्रिड में कोशिकाओं द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नटों को इकट्ठा करने और उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी का पता लगाना है। गिलहरी एक समय में केवल एक अखरोट ले सकती है और चार दिशाओं में - ऊपर, नीचे, बाएँ औ

    1. C++ में आयत क्षेत्र II

      मान लीजिए कि हमारे पास (अक्ष-संरेखित) आयतों की एक सूची है। यहाँ प्रत्येक आयत [i] ={x1, y1, x2, y2}, जहाँ (x1, y1) निचले-बाएँ कोने का बिंदु है, और (x2, y2) ऊपरी-दाएँ कोने के बिंदु हैं आयत। हमें समतल में सभी आयतों द्वारा कवर किया गया कुल क्षेत्रफल ज्ञात करना है। उत्तर बहुत हो सकता है, इसलिए हम मॉड्यू