广度优先搜索:
算法思想:
从给定的起点节点开始,依次将其邻接节点全部塞入队列,每次访问一个节点时将其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 ) ;
}
}