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


     

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

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    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的遍历结果。

    Sample Input

    1
    6 7 0
    0 3
    0 4
    1 4
    1 5
    2 3
    2 4
    3 5
    

    Sample Output

    0 3 4 2 5 1

    提示:BFS为广度优先搜索,该题考察用邻接矩阵存储图上各点位置。

    代码实现如下(g++):
    #include<bits/stdc++.h>
    
    using namespace std;
    
    int Map[110][110];
    int vis[110];//判断该点是否被遍历过
    int ans[110];//记录遍历路径
    int p;
    
    void BFS(int t,int n)//t为从那个点开始遍历,n为结点数
    {
        queue<int>s;
        vis[t]=1;
        ans[p++]=t;
        s.push(t);
        while(!s.empty())
        {
            int v=s.front();
            s.pop();
            for(int i=0; i<v; i++)//从小到大遍历
            {
                if(Map[v][i]==1&&vis[i]!=1)
                {
                    vis[i]=1;
                    ans[p++]=i;
                    s.push(i);
                }
            }
            for(int i=v+1; i<n; i++)
            {
                if(Map[v][i]==1&&vis[i]!=1)
                {
                    vis[i]=1;
                    ans[p++]=i;
                    s.push(i);
    
                }
            }
        }
    }
    
    int main()
    {
        int n,k,m,t,i,u,v;
        scanf("%d",&n);
        while(n--)
        {
            memset(Map,0,sizeof(Map));
            memset(vis,0,sizeof(vis));
            scanf("%d %d %d",&k,&m,&t);
            for(i=0; i<m; i++)
            {
                scanf("%d %d",&u,&v);
                Map[u][v]=Map[v][u]=1;
            }
            BFS(t,k);
            for(i=0; i<k; i++)
            {
                cout<<ans[i]<<" ";
            }
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 236KB
    ****************************************************/
  • 相关阅读:
    有没有开源软件可以批量安装操作系统
    MarkMan – 马克鳗,让设计更有爱!
    Tomboy : Simple note taking
    wikipad这个软件可以深入研究是基于pywebkit linux uubntu 下有分发包
    guard/guardlivereload
    Frequently Asked Questions — Scrapy 0.15.1 documentation
    Tornado Web服务器
    稀疏矩阵的存储格式 之 CSR/CSC
    Zen Coding — a new way of writing HTML and CSS code
    felinx / labs / source — Bitbucket
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9504483.html
Copyright © 2020-2023  润新知