• DS图遍历--广度优先搜索


    题目描述

    代码框架如下:

    输入

    第一行输入t,表示有t个测试实例

    第二行输入n,表示第1个图有n个结点

    第三行起,每行输入邻接矩阵的一行,以此类推输入n行

    第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开

    以此类推输入下一个示例

    输出

    每行输出一个图的广度优先搜索结果,结点编号之间用空格隔开

    样例输入

    2
    4
    0 0 1 1
    0 0 1 1
    1 1 0 1
    1 1 1 0
    5
    0 0 0 1 1
    0 0 1 0 0
    0 1 0 1 1
    1 0 1 0 0
    1 0 1 0 0

    样例输出

    0 2 3 1
    0 3 4 2 1
     
    #include<bits/stdc++.h>
    using namespace std;
    const int MaxLen=20;
    class Map
    {
    private:
        bool Visit[MaxLen];
        int Matrix[MaxLen][MaxLen];
        int Vexnum;
        void BFS(int v)
        {
            int w, u;
            int i, k;
            int *AdjVex= new int [MaxLen];             
            queue<int> q;
            for(i= 0; i< Vexnum; i++)
                Visit[i]= false;        
            for(v= 0; v< Vexnum; v++)
            {
                if(!Visit[v])
                {
                    Visit[v]= true;
                    q.push(v);
                    while(!q.empty())
                    {
                        u= q.front();
                        cout<<u<<' ';
                        q.pop();
                        for(i= 0; i< MaxLen; i++)
                           AdjVex[i]= -1;
                        k=0;
                        for(i= 0;i<Vexnum;i++)
                            if(Matrix[u][i])
                                AdjVex[k++]=i;     
                        i= 0;
                        for(w= AdjVex[i]; w>= 0; w= AdjVex[i++])
                             if(Visit[w]== false)
                             {
                                Visit[w]= true;
                                q.push(w);
                             }
                    }
                }
           }
        }
    
    public :
        void SetMatrix(int vnum,int mx[MaxLen][MaxLen])
        {
            int i,j;
            Vexnum=vnum;
            for(i=0;i<MaxLen;i++)
                for(j=0;j<MaxLen;j++)
                    Matrix[i][j]=0;
            for(i=0;i<Vexnum;i++)
                for(j=0;j<Vexnum;j++)
                    Matrix[i][j]=mx[i][j];
        }
        void BFSTraverse()
        {
            BFS(0);
        }
    };
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n,i,j;
            cin>>n;
            int a[MaxLen][MaxLen];
            for(i=0;i<n;i++)
                for(j=0;j<n;j++)
                    cin>>a[i][j];
            Map map;
            map.SetMatrix(n,a);
            map.BFSTraverse();
            cout<<endl;
        }
    }    
  • 相关阅读:
    linux mint使用起來比較穩定
    ubntu下的记录软件brasero ,mint内置
    [Enterprise Library]Data (二)DataCollection
    jquery 获取标签名
    谁会做logo呢
    供用淘宝卖家常用的称谓:各位亲,跨年,诸事顺利~
    rails缓存 学习
    test
    jquery 复习基础知识
    开机改用nginx启动,停止apache2的开机启动
  • 原文地址:https://www.cnblogs.com/Liu269393/p/10222705.html
Copyright © 2020-2023  润新知