1. 程式人生 > >研究生畢業前一日三題:2,BFS,DFS

研究生畢業前一日三題:2,BFS,DFS

(小米麵試真題,他麼的被虐了一臉)

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;			
				}		
			}		
		}

	}

//基礎的知識需要用心理解