算法题目刷题: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;			
				}		
			}		
		}

	}

 

//基础的知识需要用心理解

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值