C++数据结构之图的深度和广度遍历

#include<iostream> 

#include<queue> 

using namespace std; 

const int MaxLen=20; 

bool Visit[MaxLen]; //记录节点是否被访问

int Matrix[MaxLen][MaxLen];//邻接矩阵 

int Vexnum;//记录节点的数量 

    void DFS(int v) 

    { 

        int i; 

        Visit[v]=true; 

        cout<<v<<‘ ‘; 

        for(i=0;i<Vexnum;i++) 

        if(Matrix[v][i]==1) 

        { 

           if(!Visit[i]) 

            DFS(i); 

        } 

    } 

void BFS(int v) 

    { 

        int u,i; 

        queue<int> Q; 

                Visit[v]=true; 

                cout<<v<<” “; 

                Q.push(v);//将第一个为访问的简单压入队列

                while(!Q.empty()) 

                { 

                    u=Q.front(); //取出队列里的第一个节点

                    Q.pop(); 

                    for(i=0;i<Vexnum;i++) //然后将该节点的相邻节点放入数组里

                        if(Matrix[u][i]==1) 

                        { 

                            if(!Visit[i])

                            {

                              Visit[i]=true; 

                              cout<<i<<‘ ‘; 

                              Q.push(i);

                            }

                        } 

                } 

    }

void SetMatirx(int vnum,int mx[MaxLen][MaxLen]) //初始化邻接矩阵,节点数量,以及记录节点是否被访问的数组

        int i,j; 

Vexnum=vnum;

        for(i=0;i<vnum;i++) 

{

Visit[i]=false;

            for(j=0;j<vnum;j++) 

{

                Matrix[i][j]=mx[i][j];  

}

    BFS(0); //调用的、广度遍历函数

DFS(0);//调用深度遍历函数

cout<<endl;

int main() 

    int t,n; 

    cin>>t; 

    int i,j,ma[20][20]; 

    while(t–) 

    { 

    cin>>n; 

    for(i=0;i<n;i++) 

        for(j=0;j<n;j++) 

            cin>>ma[i][j]; 

     SetMatirx(n,ma); 

    } 

    return 0; 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/MF18211547635/article/details/50404278
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞