研究生畢業前一日三題:2,BFS,DFS
阿新 • • 發佈:2018-12-21
(小米麵試真題,他麼的被虐了一臉)
BFS(寬度優先遍歷),用佇列來輔助實現
1)從源節點開始一次按照寬度進佇列,然後彈出
2)每彈出一個點,把該結點沒進過佇列的臨界點放入到佇列
3)直到佇列為空
//沒啥說的扣程式碼,自己需要建造一個圖的類自己實踐
void methond(Nodess* node) { if( node==NULL ) { return ; } deque<Nodess* > queue; set<Nodess* > st; queue.push_front(node); st.insert(node); while( !queue.empty() ) { Nodess* cur = queue.back(); cout<<cur->value<<" "; for( Nodess* next != cur->nexts ) { if( !st.count(next)) { st.insert(next); queue.push_front(next); } } } }
DFS(深度優先遍歷),用棧來輔助實現
1)從源節點開始把結點按照深度依次入棧,然後彈出
2)每彈出一個點,把該結點沒進過棧的臨界點放入到棧
3)直到棧為空
void methond(Nodess* node) { if( node==NULL ) { return ; } stack<Nodess* > stk; set<Nodess* > setset; stk.push(node); setset.insert(node); cout<<node->value<<endl; while( !stk.empty()) { Nodess* cur = stk.top();stk.pop(); for(Nodess* next : cur.nexts) { if(!setset.count(next)) { stk.push(cur); stk.push(next); setset.insert(next); cout<<next->value; break; } } } }
//基礎的知識需要用心理解