实现邻接矩阵的广度优先遍历

题目

将邻接矩阵作为图的存储结构,实现广度优先遍历

代码


#include <iostream>
using namespace std;
#define MAX 100

typedef struct MGraph{
    
    
    char Vex[MAX];
    int Edge[MAX][MAX];
    int vexnum,arcnum;
}MGraph;

void createMGraph(MGraph &G){
    
    
    cin>>G.vexnum;
    cin>>G.arcnum;
    for(int i=0;i<G.vexnum;i++){
    
    
        cin>>G.Vex[i];
    }
    for(int i=0;i<G.vexnum;i++){
    
    
        for(int j=0;j<G.arcnum;j++){
    
    
            G.Edge[i][j]=0;
        }
    }
    int m,n;
    for(int i=0;i<G.arcnum;i++){
    
    
        cin>>m>>n;
        G.Edge[m][n]=G.Edge[n][m]=1;
    }
}

void dispMGraph(MGraph G){
    
    
    cout<<"  ";
    for(int i=0;i<G.vexnum;i++){
    
    
        cout<<G.Vex[i]<<" ";
    }
    cout<<endl;
    for(int i=0;i<G.vexnum;i++){
    
    
        cout<<G.Vex[i];
        for(int j=0;j<G.vexnum;j++){
    
    
            cout<<" "<<G.Edge[i][j];
        }
        cout<<endl;
    }
}

int visited[MAX];
void MBFS(MGraph G,int v){
    
    
    for(int i=0;i<G.vexnum;i++)
        visited[i]=0;
    int Q[MAX],front=-1,rear=-1;    //定义队列并初始化
    int i,j;
    visited[v]=1;
    cout<<G.Vex[v]<<" ";
    rear=(rear+1)%MAX;
    Q[rear]=v;
    while(rear!=front){
    
     //当队不为空!
        front = (front+1)%MAX;  //出队
        i=Q[front];
        for(j=0;j<G.vexnum;j++){
    
    
            if(G.Edge[i][j]==1){
    
    
                if(visited[j]==0){
    
    
                    visited[j]=1;
                    cout<<G.Vex[j]<<" ";
                    rear = (rear + 1)%MAX;
                    Q[rear]=j;
                }
            }
        }
    }
}

int main() {
    
    
    MGraph G;
    createMGraph(G);
    dispMGraph(G);
    cout<<"邻接矩阵的广度优先遍历:"<<endl;
    MBFS(G,0);
    return 0;
}

运行效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/niulinbiao/article/details/127562217