题目
将邻接矩阵作为图的存储结构,实现广度优先遍历
代码
#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;
}