मैं एक पुनरावर्ती डीएफएस एल्गोरिथ्म लिखा है एक ग्राफ पार करने के लिए:Iterative डीएफएस बनाम रिकर्सिव डीएफएस और विभिन्न तत्वों के आदेश
template <typename E, typename N>
void Graph<E, N>::IterativeDFS(Node n)
{
Stack<Node> stack;
stack.Push(n);
while(!stack.IsEmpty())
{
Node u = stack.Read();
stack.Pop();
if(!IsMarked(u))
{
std::cout << ReadNode(u) << " ";
MarkVisited(u);
NodeList adjnodes = Adjacent(u);
NodeList::position pos = adjnodes.FirstPosition();
while(!adjnodes.End(pos))
{
stack.Push(adjnodes.ReadList(pos));
pos = adjnodes.NextPosition(pos);
}
}
}
:
void Graph<E, N>::DFS(Node n)
{
std::cout << ReadNode(n) << " ";
MarkVisited(n);
NodeList adjnodes = Adjacent(n);
NodeList::position pos = adjnodes.FirstPosition();
while(!adjnodes.End(pos))
{
Node adj = adjnodes.ReadList(pos);
if(!IsMarked(adj))
DFS(adj);
pos = adjnodes.NextPosition(pos);
}
}
तो मैं एक ढेर का उपयोग कर एक सतत डीएफएस एल्गोरिथ्म लिखा है मेरी समस्या यह है कि एक ग्राफ में, उदाहरण के लिए, मैं तीन नोड्स 'ए', 'बी', 'सी' आर्क्स ('ए', 'बी') और ('ए', 'सी') के साथ दर्ज करता हूं मेरा आउटपुट है:
'ए', 'बी', 'सी' रिकर्सिव डीएफएस संस्करण के साथ , और:
'ए', 'सी', 'बी' पुनरावर्तक डीएफएस एक के साथ।
मुझे वही आदेश कैसे मिल सकता है? क्या मुझसे कुछ गलत हो रही है?
धन्यवाद!
दोनों ऑर्डर वैध डीएफएस ऑर्डरिंग हैं, क्योंकि नोड्स 'बी' और 'सी' नोड 'ए' से एक हॉप में पहुंच योग्य हैं। क्या आप चिंतित हैं कि यह एक अवैध आदेश दे रहा है? या आप सिर्फ दो एल्गोरिदम चाहते हैं - जिनमें से दोनों वैध ऑर्डरिंग उत्पन्न करते हैं - एक ही ऑर्डरिंग के लिए? – templatetypedef
मुझे पता है कि एक ढेर का उपयोग करके मैं एक पुनरावर्ती तरीके से एक पुनरावर्ती कार्य अनुकरण करने में सक्षम होना चाहिए, तो मुझे एक ही आउटपुट क्यों नहीं मिलता है? – JohnQ