算法与数据结构实验5:图的深度和广度优先遍历(邻接矩阵)
2017-11-14 09:31
627 查看
Description
给定一个无向连通图,顶点编号从0到n-1,用深度优先搜索(DFS)和广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)
Input
第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0<t<k),表示有k个顶点,m条边,t为遍历的起始顶点。 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
Output
两行,每行为用空格隔开的k个整数,对应一组数据,分别表示DFS和BFS的遍历结果。
Sample Input
6 7 0
0 3
0 4
1 4
1 5
2 3
2 4
3 5
Sample Output
0 3 2 4 1 5
0 3 4 2 5 1
给定一个无向连通图,顶点编号从0到n-1,用深度优先搜索(DFS)和广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)
Input
第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0<t<k),表示有k个顶点,m条边,t为遍历的起始顶点。 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
Output
两行,每行为用空格隔开的k个整数,对应一组数据,分别表示DFS和BFS的遍历结果。
Sample Input
6 7 0
0 3
0 4
1 4
1 5
2 3
2 4
3 5
Sample Output
0 3 2 4 1 5
0 3 4 2 5 1
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<queue> #define Max_Vertex_Num 100 using namespace std; typedef struct node { int vex[Max_Vertex_Num+10];//顶点向量 int arc[Max_Vertex_Num+10][Max_Vertex_Num+10];//邻接矩阵 int vexnum,arcnum;//顶点数和边数 } Mgraph; int visit[Max_Vertex_Num+10];//访问数组 void CreatMGraph(Mgraph *G)//创建邻接矩阵 { for(int i=1; i<=G->arcnum; i++) { int a,b; cin>>a>>b; G->arc[a][b]=G->arc[b][a]=1;//无向图 } } void DFS(Mgraph *G,int k) { visit[k]=1; for(int i=0; i<G->vexnum; i++) if(G->arc[k][i]&&!visit[i]) { cout<<" "<<i; DFS(G,i); } } void DFS_Travel(Mgraph *G,int k) { memset(visit,0,sizeof(visit)); cout<<k; DFS(G,k);//先遍历一遍以k为顶点出发的所有点 for(int i=0; i<G->vexnum; i++) { if(!visit[i]) DFS(G,i); } } queue<int>q; void BFS(Mgraph *G,int k) { visit[k]=1; q.push(k); while(!q.empty()) { int t=q.front(); q.pop(); visit[t]=1; for(int i=0; i<G->vexnum; i++) { if(G->arc[t][i]&&!visit[i]) { cout<<" "<<i; visit[i]=1; q.push(i); } } } } void BFS_Travel(Mgraph *G,int k) { memset(visit,0,sizeof(visit)); cout<<k; BFS(G,k); for(int i=0; i<G->vexnum; i++) { if(!visit[i]) BFS(G,i); } } int main() { Mgraph G; int k,m,t; ci b13c n>>k>>m>>t; G.vexnum=k; G.arcnum=m; CreatMGraph(&G); DFS_Travel(&G,t); cout<<endl; BFS_Travel(&G,t); cout<<endl; }
相关文章推荐
- 图——广度优先遍历和深度优先遍历——邻接矩阵表示法
- 图(邻接矩阵)的深度、广度优先遍历
- C语言以邻接矩阵为存储结构的图的构造以及广度优先,深度优先遍历
- 图的邻接矩阵存储 深度优先遍历 广度优先遍历 C语言实现
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- 图的邻接矩阵生成算法,深度优先遍历算法,广度优先遍历算法,Prime算法。):
- 图的邻接矩阵表示、广度优先遍历和深度优先遍历
- 【图】图的邻接矩阵存储和广度、深度优先遍历
- 图的邻接矩阵以及深度优先遍历 + 广度优先遍历
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- 图的邻接矩阵存储表示 深度优先和广度优先遍历
- 【图】图的邻接矩阵存储和广度、深度优先遍历
- 【数据结构】邻接矩阵表示法的图的深度广度优先遍历递归和非递归遍历
- 邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)
- Java图的建立以及深度广度优先遍历(邻接矩阵)
- 图的遍历(1)邻接矩阵的深度和广度优先遍历
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- 数据结构中用邻接矩阵方式储存图,广度优先,深度优先遍历
- 图的邻接矩阵表示以及深度、广度优先遍历
- c语言编程 输出一个无向图的邻接表,邻接矩阵,进行深度和广度优先遍历