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; 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值