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

本文介绍了一种基于邻接矩阵实现的广度优先搜索(BFS)算法,该算法用于遍历无向连通图,并输出从指定起点开始的遍历序列。文章通过具体的示例展示了如何使用BFS进行图的遍历。


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

Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)
Input
输入第一行为整数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顶点的无向边。
Output
输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示BFS的遍历结果。
Example Input
1
6 7 0
0 3
0 4
1 4
1 5
2 3
2 4
3 5
Example Output
0 3 4 2 5 1
Hint
以邻接矩阵作为存储结构。




#include<stdio.h> 
#include<string.h> 
int visited[1000],que[1000],a[1000],b[1000],head[200],l,j; 
struct node 

    int u,v; 
    int next; 
}st[100000]; 
void add(int u,int v) 

  st[l].v=v; 
  st[l].next=head[u]; 
  head[u]=l++; 

void BFS(int t) 

    int out=0,in=0,i,x,h; 
    visited[t]=1; 
    que[in++]=t; 
    while(out<in) 
    { 
        h=que[out++]; 
        a[j++]=h; 
        x=0; 
        for(i=head[h];i!=-1;i=st[i].next) 
        { 
           if(!visited[st[i].v]) 
            { 
                b[x++]=st[i].v; 
                visited[st[i].v]=1; 
            } 
        } 
        for(i=x-1;i>=0;i--) 
            que[in++]=b[i]; 
 
    } 

int main() 

 int i,n,m,k,t,l1,l2; 
  scanf("%d",&t); 
  while(t--) 
  { 
      l=0; 
      j=0; 
      memset(head,-1,sizeof(head)); 
      memset(visited,0,sizeof(visited)); 
      scanf("%d %d %d",&n,&m,&k); 
      for(i=0;i<m;i++) 
      { 
          scanf("%d %d",&l1,&l2); 
         add(l1,l2); 
          add(l2,l1); 
      } 
      BFS(k); 
      for(i=0;i<j;i++) 
        if(i==j-1) 
        printf("%d\n",a[i]); 
      else 
        printf("%d ",a[i]); 
  } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值