SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历
2013-07-29 11:07
316 查看
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2142&cid=1186
对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起始顶点。
下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
主要难点是用邻接表去存,相比于邻接矩阵这个要稍麻烦一点,原则上有两种做法,先介绍用queue和vector的那种做法。
View Code
题目描述
给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)输入
输入第一行为整数n(0< n <100),表示数据的组数。对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起始顶点。
下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
输出
输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示BFS的遍历结果。示例输入
1 6 7 0 0 3 0 4 1 4 1 5 2 3 2 4 3 5
示例输出
0 3 4 2 5 1
主要难点是用邻接表去存,相比于邻接矩阵这个要稍麻烦一点,原则上有两种做法,先介绍用queue和vector的那种做法。
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<vector> using namespace std; priority_queue<int ,vector<int >,greater<int> >sort[151]; //sort数组是凡是与sort的下标相连的点组成的队列,且为优先队列 queue<int>q;//建立q普通队列 int u,v; int mark;//控制输出 int vis[151];//标记数组 void BFS(int kk) { q.push(kk);// 是首元素,直接加入队列 vis[kk]=1; while(!q.empty())//判断是否为空 { int s=q.front();//取队列首元素 q.pop();//删除队列头元素,就是下面直接输出 if(mark)//控制输出空格 { cout<<s; mark=0; } else printf(" %d",s); while(!sort[s].empty())//判断这个相关联队列是否为空 { int ss=sort[s].top();//取它的队列首元素 if(!vis[ss])//如果没被标记 { q.push(ss);//就加入q队列中 vis[ss]=1; } sort[s].pop();//直接删除掉这个队列首元素 } } } int main() { //memset(map,0,sizeof(map)); while(!q.empty())//将队列清空 q.pop(); int n; cin>>n; for(int i=1; i<=n; i++) { memset(vis,0,sizeof(vis)); int k,m,t; cin>>k>>m>>t; for(int k=1; k<=m; k++)//将队列清空 { while(!sort[k].empty()) { sort[k].pop(); } } for(int j=1; j<=m; j++) { cin>>u>>v; sort[u].push(v);//因为是用邻接表在存储,所以用这种形式表示与u有关联的点存在sort这个队列中 sort[v].push(u); } mark=1; BFS(t); printf("\n"); } return 0; }
View Code
相关文章推荐
- 【2142】数据结构实验之图论二:基于邻接表的广度优先搜索遍历 (SDUT)
- 【2142】数据结构实验之图论二:基于邻接表的广度优先搜索遍历 (SDUT)
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT 2412 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT-数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUTOJ 2142 数据结构实验图论一:基于邻接表的广度优先搜索遍历
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT-数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUTACM 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT_2015寒假集训_BFS&DFS_A-数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT_2141_数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历