数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    xiaoxiao2025-10-06  3

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

    给定一个无向连通图,顶点编号从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

    提示

    <span style="color:#ff6666;">方法一:</span> #include<stdio.h> #include<math.h> #include<memory.h> int m,k,t,n; int s[120][120];//用来保存定点间的关系 int v[120];//表示要遍历的结点 int queue[120];//用队列来保存已经访问过的节点 void bfs(int k)//广度优先搜索 { int num1,num2; int count;//表示将要访问的节点 num1=num2=0; memset(v,0,sizeof(v)); queue[num1++]=k;//已经访问过的节点进队 v[k]=1;//将已经访问过的节点置为1 while(num1>num2) { count=queue[num2++]; for(int i=0;i<n;i++) { if(v[i]==0&&s[count][i]==1)//节点未被访问过且节点关系为1 { printf("%d ",i); v[i]=1; queue[num1++]=i; } } } } int main() { scanf("%d",&t); while(t--) { //m为边数,n为节点数,k为遍历起始顶点; scanf("%d %d %d",&n,&m,&k); int u,v; memset(s,0,sizeof(s)); for(int i=0;i<m;i++) { scanf("%d %d",&u,&v); s[u][v]=s[v][u]=1;//将两节点间的关系置为1 } printf("%d ",k); bfs(k); printf("\n"); } return 0; } <span style="color:#ff6666;">方法二:</span> #include<stdio.h> #include<malloc.h> #include<memory.h> int s[1000][1000];//保存节点之间的关系 int v[1000];//记录当前节点是否被访问过 int queue[1000];//已经访问过的节点入队 int k,m,t;//遍历的起始地点,k个顶点,m条边,t为起始地点 int num;//记录遍历后的入队顶点 int count;//出队的队首 //广度优先搜索 void bfs(int x) { for(int i=0;i<k;i++) { if(v[i]==0&&s[x][i]==1) { printf("%d ",i); queue[++num]=i;//先遍历的先入队 v[i]=1; } } if(count<=num)//注意边界条件 { bfs(queue[++count]); } } //建立基于邻接矩阵的图 void setG(int a,int b) { s[a][b]=s[b][a]=1; } int main() { scanf("%d",&t); while(t--) { num=count=-1; num1=0; memset(s,0,sizeof(s)); memset(v,0,sizeof(v)); scanf("%d %d %d",&k,&m,&t); for(int i=0;i<m;i++) { int a,b; scanf("%d %d",&a,&b); setG(a,b); } printf("%d ",t);//先输出第一个定点 v[t]=1; bfs(t); printf("\n"); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1302884.html
    最新回复(0)