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

C++ में जॉनसन एल्गोरिदम कार्यान्वयन

यहां हम दो वर्टेक्स के बीच सबसे छोटा पथ खोजने के लिए जॉनसन एल्गोरिदम देखेंगे।

C++ में जॉनसन एल्गोरिदम कार्यान्वयन

C++ में जॉनसन एल्गोरिदम कार्यान्वयन

ग्राफ यहां दिया गया है। एज के बीच सबसे छोटा पथ नीचे जैसा है। यह प्रोग्राम वर्टेक्स की संख्या, एज की संख्या, और उनकी लागत के साथ एज लेगा।

इनपुट - वर्टेक्स: 3

एज: 5

लागत के साथ एज -

1 2 8

2 1 12

1 3 22

3 1 6

2 3 4

आउटपुट - ग्राफ की दूरी मैट्रिक्स।

0812
1004
6140

एल्गोरिदम

johnsonAlgorithm(cost)

इनपुट - दिए गए ग्राफ की लागत मैट्रिक्स।

आउटपुट - किसी भी वर्टेक्स से किसी भी वर्टेक्स के लिए सबसे छोटे पथ के लिए मैट्रिक्स।

Begin
    'A' नामक एक और मैट्रिक्स बनाएं जो लागत मैट्रिक्स के समान हो, यदि iवीं पंक्ति और jवें स्तंभ के बीच कोई एज नहीं है, तो A[i,j] पर इन्फिनिटी रखें
    for k := 1 to n, do
        for i := 1 to n, do
            for j := 1 to n, do
                A[i, j] = A[i, j] और (A[i, k] + A[k, j]) का न्यूनतम
            done
        done
    done
    वर्तमान A मैट्रिक्स प्रदर्शित करें
End

उदाहरण

#include <iostream>
#define INF 9999
using namespace std;

int min(int a, int b);
int cost[10][10], adj[10][10];

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

int main() {
    int vert, edge, i, j, k, c;
    cout << "Enter no of vertices: ";
    cin >> vert;
    cout << "Enter no of edges: ";
    cin >> edge;
    cout << "Enter the EDGE Costs:\n";
    for (k = 1; k <= edge; k++) { // इनपुट लें और इसे adj और cost मैट्रिक्स में स्टोर करें
        cin >> i >> j >> c;
        adj[i][j] = cost[i][j] = c;
    }
    for (i = 1; i <= vert; i++)
        for (j = 1; j <= vert; j++) {
            if (adj[i][j] == 0 && i != j)
                adj[i][j] = INF; // यदि कोई एज नहीं है, तो इन्फिनिटी रखें
        }
    for (k = 1; k <= vert; k++)
        for (i = 1; i <= vert; i++)
            for (j = 1; j <= vert; j++)
                adj[i][j] = min(adj[i][j], adj[i][k] + adj[k][j]); // k के माध्यम से i से j तक न्यूनतम पथ खोजें
    cout << "Resultant adj matrix\n";
    for (i = 1; i <= vert; i++) {
        for (j = 1; j <= vert; j++) {
            if (adj[i][j] != INF)
                cout << adj[i][j] << " ";
        }
        cout << "\n";
    }
    return 0;
}

आउटपुट

Enter no of vertices: 3
Enter no of edges: 5
Enter the EDGE Costs:
1 2 8
2 1 12
1 3 22
3 1 6
2 3 4
Resultant adj matrix
0 8 12
10 0 4
6 14 0
  1. - C++ प्रोग्राम: एक्सटेंडेड यूक्लिडियन एल्गोरिदम इम्प्लीमेंट करना

    एक्सटेंडेड यूक्लिडियन एल्गोरिदम दो संख्याओं का GCD निकालने का बस एक और तरीका है। इसमें ax + by = gcd(a, b) की गणना के लिए अतिरिक्त वेरिएबल्स हैं। यह कंप्यूटर प्रोग्राम में उपयोग करने के लिए अधिक कुशल है। एल्गोरिदम Begin वेरिएबल a, b, x और y घोषित करें gcdExtended(int a, int b, int *x, int

  1. - C++ प्रोग्राम: इंटरपोलेशन सर्च एल्गोरिदम लागू करना

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

  1. - C++ प्रोग्राम: फिशर-येट्स एल्गोरिदम से ऐरे शफलिंग

    फिशर-येट्स एल्गोरिदम फिशर-येट्स एल्गोरिदम ऐरे तत्वों का यादृच्छिक क्रमपरिवर्तन उत्पन्न करता है, यानी यह ऐरे के सभी तत्वों को निष्पक्ष रूप से शफल करता है। सभी क्रमपरिवर्तन समान रूप से संभावित होते हैं। C++ प्रोग्राम उदाहरण #include <iostream> #include <cstdlib> #include <ctime> us