图的广度优先搜索(邻接表)

来源:互联网 发布:免费钢结构计算软件 编辑:程序博客网 时间:2024/05/22 09:23

Problem Description

给出图的顶点数和顶点与顶点之间的连接关系,请输出用邻接表存储的图的广度优先搜索顶点序列。

Input

输入的第一行是一个整数T表示测试示例的数目,每组示例的第一行有两个数m(2<=m<=10)和n(1<=n<=m*(m-1)/2),m表示顶点的个数(顶点的标号从1-m),n表示边的个数。下面n行的每行有两个顶点号表示一条边。后面一行是一个数k,k表示需要搜索的顶点数量。后面k行每行有一个数表示从该顶点开始搜索。在搜索过程中与同一个顶点相邻的顶点按存储的先后顺序进行搜索。

Output

每组输出k行,每行为从输入的一个顶点开始搜索的广度优先搜索序列。每组搜素结果之间用空行隔开。

Sample Input

12 11 2212

Sample Output

1 22 1
//标程:
#include<iostream>#include<cstring>#include<queue>#include<vector>using namespace std;int edge_num,point_num,start_point,cnt;int  visited[15];vector<int> map[15];queue<int> q_map;void bfs(){    while(!q_map.empty()){int temp_point=q_map.front();cnt++;if(cnt<point_num) cout<<temp_point<<" ";if(cnt==point_num)  cout<<temp_point<<endl;q_map.pop();for(int i=0;i<map[temp_point].size();i++){if(visited[map[temp_point][i]]==0){visited[map[temp_point][i]]=1;q_map.push(map[temp_point][i]);}}}}int main(){ //freopen("b.txt","r",stdin);int group_num,i,point1,point2;cin>>group_num;while(group_num--){cin>>point_num>>edge_num;while(!q_map.empty()) q_map.pop();for(i=1;i<=point_num;i++) map[i].clear();for(i=1;i<=edge_num;i++){                  cin>>point1>>point2;                  map[point1].push_back(point2);map[point2].push_back(point1);}int ask;cin>>ask;for(i=1;i<=ask;i++){memset(visited,0,sizeof(visited));cin>>start_point;visited[start_point]=1;q_map.push(start_point);cnt=0;                  bfs();}if(group_num!=0) cout<<endl;}return 0;}
0 0
原创粉丝点击