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

बिल्कुल k किनारों वाला सबसे छोटा रास्ता


एक निर्देशित ग्राफ प्रत्येक जोड़े के शीर्षों के बीच भार के साथ प्रदान किया जाता है, और दो शीर्ष u और v भी प्रदान किए जाते हैं। हमारा कार्य शीर्ष u से शीर्ष v तक की न्यूनतम दूरी ज्ञात करना है, जिसमें किनारों की संख्या k है।

बिल्कुल k किनारों वाला सबसे छोटा रास्ता

इस समस्या को हल करने के लिए, हम शीर्ष u से शुरू करेंगे और सभी आसन्न शीर्षों पर जाएंगे और k - 1 के रूप में k मान का उपयोग करके आसन्न शीर्षों के लिए पुनरावृति करेंगे।

इनपुट और आउटपुट

Input:
The cost matrix of the graph.
0 10 3 2
∞  0 ∞ 7
∞  ∞ 0 6
∞  ∞ ∞ 0

Output:
Weight of the shortest path is 9

एल्गोरिदम

shortKEdgePath(u, v, edge)

इनपुट - वर्टेक्स यू और वी, और कई किनारे।

आउटपुट - सबसे छोटे रास्ते की दूरी।

Begin
   if edge = 0 and u = v, then
      return 0
   if edge = 1 and cost[u, v] ≠ ∞, then
      return cost[u, v]
   if edge <= 0, then
      return ∞
   set shortPath := ∞

   for all vertices i, do
      if cost[u, i] ≠ ∞ and u ≠ i and v ≠ i, then
         tempRes := shortKEdgePath(i, v, edge - 1)
         if tempRes ≠ ∞, then
            shortPath = minimum of shortPath and (cost[u,i]+tempRes
   done
   return shortPath
End

उदाहरण

#include <iostream>
#define NODE 4
#define INF INT_MAX
using namespace std;

int cost[NODE][NODE] = {
   {0, 10, 3, 2},
   {INF, 0, INF, 7},
   {INF, INF, 0, 6},
   {INF, INF, INF, 0}
};

int minimum(int a, int b) {
   return (a<b)?a:b;
}

int shortKEdgePath(int u, int v, int edge) {
   if (edge == 0 && u == v)    //when 0 edge, no path is present            
      return 0;
   if (edge == 1 && cost[u][v] != INF)    //when only one edge, and (u,v) is valid
      return cost[u][v];
   if (edge <= 0)    //when edge is -ve, there are infinity solution        
      return INF;
   int shortPath = INF;

   for (int i = 0; i < NODE; i++) {    //for all vertices i, adjacent to u
      if (cost[u][i] != INF && u != i && v != i) {
         int tempRes = shortKEdgePath(i, v, edge-1);
         if (tempRes != INF)
            shortPath = minimum(shortPath, cost[u][i] + tempRes);
      }
   }
   return shortPath;
}

int main() {
   int src = 0, dest = 3, k = 2;
   cout << "Weight of the shortest path is " << shortKEdgePath(src, dest, k);
}

आउटपुट

Weight of the shortest path is 9

  1. एकल-स्रोत सबसे छोटा पथ, मनमाना भार

    सिंगल सोर्स शॉर्टेस्ट पाथ एल्गोरिथम (मनमाने ढंग से वजन सकारात्मक या नकारात्मक के लिए) को बेलमैन-फोर्ड एल्गोरिथम के रूप में भी जाना जाता है, जिसका उपयोग स्रोत के शीर्ष से किसी अन्य शीर्ष तक न्यूनतम दूरी खोजने के लिए किया जाता है। दिज्क्स्ट्रा के एल्गोरिथ्म के साथ इस एल्गोरिथ्म के बीच मुख्य अंतर यह है

  1. 0-1 बीएफएस (बाइनरी वेट ग्राफ में सबसे छोटा पथ) सी प्रोग्राम में?

    मान लीजिए कि हमारे पास कुछ नोड्स और जुड़े किनारों के साथ एक ग्राफ है। प्रत्येक किनारे में द्विआधारी भार होता है। तो भार या तो 0 या 1 होगा। एक स्रोत शीर्ष दिया गया है। हमें स्रोत से किसी अन्य शीर्ष तक सबसे छोटा रास्ता खोजना है। मान लीजिए कि ग्राफ नीचे जैसा है - सामान्य बीएफएस एल्गोरिथम में सभी एज

  1. फेसबुक वास्तव में AI के साथ क्या कर रहा है?

    यदि फेसबुक के उच्च-शक्ति वाले, स्वयं-सिखाए गए कंप्यूटरों को साइट पर आपकी हर हरकत को देखने का विचार आपको थोड़ा अजीब लगता है, तो हो सकता है कि आप उनकी समर्पित एआई शोध प्रयोगशाला में बहुत दूर नहीं देखना चाहें। फेसबुक की फोटो टैगिंग, दोस्तों की सिफारिशें, फर्जी-न्यूज फिल्टर, टाइमलाइन सॉर्टिंग और कई अन्य