मैंने हाल ही में डीएफएस एल्गोरिदम सीखा है और सी ++ और एसटीएल अवधारणा का उपयोग करके लागू करने का प्रयास किया है। लेकिन जीसीसी के साथ कोड चलाते समय यह मुझे कुछ त्रुटि दे रहा है। क्या कोई सलाह दे सकता है कि गलती मेरे अंत में कहां की गई है?

त्रुटि है

2.75 सेकंड में कोड = 3221225477 के साथ बाहर निकल गया

कृपया नीचे पूरा कोड देखें:

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

void addEdge(vector<int> adj[], int u, int v)
{
    adj[u].push_back(v); //singly linked ,not bidirectional
}

void DFS(vector<int> adj[], int v, vector<bool> &vis)
{
    vis[v] = true;
    cout << v << " ";
    //for(int i=0;i<adj[v].size() ; i++)
    for (auto i : adj[v])
    {
        //if(!vis[adj[v][i]])
        if (vis[i] == false)
            DFS(adj, i, vis);
    }
}

int main()
{
    vector<int> adj[5];
    vector<bool> visited(5, false);
    addEdge(adj, 1, 2);
    addEdge(adj, 1, 3);
    addEdge(adj, 2, 4);
    addEdge(adj, 3, 5);
    addEdge(adj, 4, 5);
    DFS(adj, 1, visited);
}
2
Chandra Shekhar 28 जुलाई 2019, 13:23

1 उत्तर

सबसे बढ़िया उत्तर

मुझे आपके कोड में निम्न बग्स मिले हैं

  1. #include <bits/stdc++.h>. इस हेडर का प्रयोग न करें। आवश्यक C++ हेडर का प्रयोग करें
  2. using namespace std; इसका उपयोग न करें। योग्य नामों का प्रयोग करें
  3. vector<int> adj[5]; के लिए कभी भी और किसी भी परिस्थिति में सादे सी-स्टाइल सरणियों का उपयोग न करें। आपके मामले में आपको वेक्टर के वेक्टर की आवश्यकता है
  4. आपके दोनों वेक्टर/सरणी आयाम एक से छोटे हैं।

आप किनारे की संख्या 5 तक जोड़ते हैं। लेकिन आपके सरणी/वेक्टर में केवल 5 तत्व हैं। सी ++ सरणी सूचकांकों में 0 से गिनती शुरू होती है। इसलिए, 5 तत्वों के साथ एक वेक्टर वी में तत्व वी [0], वी [1], वी [2], वी [3], वी [4] होता है। यदि आप इंडेक्स 5 तक पहुंचने का प्रयास करते हैं, तो आपके पास सीमा से बाहर त्रुटि होगी। प्रोग्राम क्रैश हो जाएगा।

std::vector का at() फ़ंक्शन भी आपका मित्र होगा।

बस सरणी आकार बढ़ाएं।

  vector<int> adj[6];                  // 6 elements needed
  vector<bool> visited(6, false);      // 6 elements needed
1
Armin Montigny 28 जुलाई 2019, 14:20