zoukankan      html  css  js  c++  java
  • 数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    题目描述

    给定一个无向连通图,顶点编号从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
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<cstdlib>
     5 #include<queue>
     6 
     7 using namespace std;
     8 int visited[101];
     9 int n,m,k;
    10 queue<int>q;
    11 struct node
    12 {
    13     int x,y;
    14     struct node *next;
    15 }*head[101];
    16 
    17 void add(int x,int y)
    18 {
    19     struct node *p=(struct node *)malloc(sizeof(struct node));
    20     p->x=x;
    21     p->y=y;
    22     p->next=head[x];
    23     head[x]=p;
    24 }
    25 
    26 int cmp(const void *a,const void *b)
    27 {
    28     return *(int *)a-*(int *)b;
    29 }
    30 void bfs(int t)
    31 {
    32     int i,x,a[101],b[101],j,y;
    33     q.push(t);
    34     visited[t]=1;
    35     j=0;
    36     while(!q.empty())
    37     {
    38         x=q.front();
    39         a[++j]=x;
    40         q.pop();
    41         y=0;
    42         for(struct node *p=head[x]; p!=NULL; p=p->next)
    43         {
    44             if(visited[p->y]==0)
    45             {
    46                 b[y++]=p->y;
    47                 visited[p->y]=1;
    48             }
    49 
    50         }
    51         if(y>=1)
    52             qsort (b,y,sizeof(b[0]),cmp);
    53         for(i=0; i<y; i++)
    54             q.push(b[i]);
    55 
    56     }
    57     for(i=1; i<=j-1; i++)
    58         printf("%d ",a[i]);
    59     printf("%d
    ",a[i]);
    60 }
    61 int main()
    62 {
    63     int t,i,x,y;
    64     scanf("%d",&n);
    65     while(n--)
    66     {
    67         memset(head,NULL,sizeof(head));
    68         memset(visited,0,sizeof(visited));
    69         cin>>k>>m>>t;
    70         for(i=0;i<m;i++)
    71         {
    72             cin>>x>>y;
    73             add(x,y);
    74             add(y,x);
    75         }
    76         bfs(t);
    77     }return 0;
    78 }
    
    
  • 相关阅读:
    视觉slam十四讲课后习题ch3-7
    视觉slam十四讲课后习题ch3-6
    视觉slam十四讲课后习题ch3--5题
    (原创)遗传算法C++实现
    (笔记):组合and继承之访问限制(二)
    (笔记):组合and继承之访问限制(一)
    (笔记):初始化列表之初始化顺序
    (笔记):构造函数之初始化列表
    笔记:构造函数易错点
    (笔记):构造函数与析构函数
  • 原文地址:https://www.cnblogs.com/wlc297984368/p/3254712.html
Copyright © 2011-2022 走看看