算法学习BFS初始认识

广度优先搜索:

算法思想:

从给定的起点节点开始,依次将其邻接节点全部塞入队列,每次访问一个节点时将其pop()出队列,并将其邻接节点也塞入队列。直到队列为空,算法结束。

#include<string>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<set>
#include<vector>
#include<queue>
using namespace std;

vector <int> e[110] ; //领接表存储数据

void add_e(int u , int v){ //加入节点时用vector保存可以到达的下一个节点
	e[u].push_back(v) ;
}

void bfs(int root ){ //节点root 开始

	queue<int> que ; //队列实现
	bool vis[110] ;
	
	memset(vis , 0 , sizeof(vis)) ; //访问置零
	vis[root] = 1 ; //从初始节点
	que.push(root) ;// 压入队列
	
	int u , len  ;  // u表示当前节点,len表示可以到达的节点个数
	while(!que.empty()){ //直到不为0
		
		u = que.front() ;
		que.pop() ;
		cout << u << "  " ;
		for(int i = 0 ; i < e[u].size() ; i ++){
			if(vis[i] == 0){
				que.push(i) ;
				e[u][i] = 1 ;
			}
		}
	}
}
int main(){
	int n ;
	while(cin >> n){
		int root ;
		for(int i = 1 ; i <= n ; i++){
			int u , v ;
			cin >> u >> v ;
			if(i == 1 ){
				root = u ;
			}
			add_e(u,v) ;
		}
		
		bfs(root ) ;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值