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

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    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

    提示

    用邻接表存储。
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<queue>
     5 #include<vector>
     6 using namespace std;
     7 priority_queue<int ,vector<int>,greater<int> >pque[102];
     8 /*这个是跟堆,具体可以去网上看看,这里用的比较简单,
     9 所以不用理解很多,大概需要知道有3个参数,
    10 不多说了,自己百度去吧。*/
    11 int visit[102],T;//visit是标记数组
    12 queue<int>temp;
    13 void BFS(int key)
    14 {
    15     temp.push(key);
    16     while(!temp.empty())//一直访问到空为止
    17     {
    18         int b=temp.front();
    19         if(visit[b])
    20             temp.pop();
    21         else
    22         {
    23             if(T)//标记打印,以免出现格式错误
    24                 printf(" %d",b);
    25             else
    26             {
    27                 printf("%d",b);
    28                 T=1;
    29             }
    30             visit[b]=1;
    31             temp.pop();
    32             while(!pque[b].empty())//不断地将与该点相关的点弹出
    33             {
    34                 int a=pque[b].top();
    35                 temp.push(a);
    36                 pque[b].pop();
    37             }
    38         }
    39     }
    40 }
    41 int main()
    42 {
    43     int n;
    44     cin>>n;
    45     while(n--)
    46     {
    47         memset(visit,0,sizeof(visit));//初始化
    48         int k,m,t;
    49         cin>>k>>m>>t;
    50         for(int i=0; i<k; i++)//初始化,就是清空跟堆
    51             while(!pque[i].empty())
    52                 pque[i].pop();
    53         while(m--)//这里是输入
    54         {
    55             int a,b;
    56             cin>>a>>b;
    57             pque[a].push(b);
    58             pque[b].push(a);
    59         }
    60         T=0;
    61         BFS(t);
    62         printf("
    ");
    63     }
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    Windows 8 系列 Block Game 随笔
    Windows 8 系列 仿新浪微博图片放大功能 随笔
    正则总结 随笔
    Windows 8 系列 GirdView 滚动事件获取 随笔
    Windows 8 系列 ApplicationSettings 随笔
    Windows 8 系列 Popup 应用 随笔
    JS 写 个简单的 TreeView
    Windows 8 系列 Toast_Title_Badge 随笔
    Js分页条 摆脱JQuery及JQuery分页插件的束缚
    Windows 8 系列 DataTemplateSelector_IValueConverter 随笔
  • 原文地址:https://www.cnblogs.com/kongkaikai/p/3228303.html
Copyright © 2011-2022 走看看