![在这里插入图片描述](https://img-blog.csdnimg.cn/20200210184957535.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMzYzMDMy,size_16,color_FFFFFF,t_70)
核心代码
int sign2[MAX];
void BFS(MGraph G, int v){
cout<<G.vertex[v]<<" ";
sign2[v] = 1;
queue<int> q;
q.push(v);
while(!q.empty()){
int w = q.front();
q.pop();
for(int i=0; i<G.vertexnum; i++){
if( (G.e[w][i])!=INFINITE && !sign2[i]){
cout<<G.vertex[i]<<" ";
sign2[i] = 1;
q.push(i);
}
}
}
}
全部代码
#include <iostream>
#include <queue>
using namespace std;
#define MAX 50
#define INFINITE 32767
struct MGraph{
int vertexnum;
int edgenum;
char vertex[MAX];
int e[MAX][MAX];
};
int findvertex(MGraph G, char key);
void createG(MGraph &G){
cout<<"请输入顶点数:"<<endl;
cin>>G.vertexnum;
cout<<"请输入顶点字符:"<<endl;
for(int i=0; i<G.vertexnum; i++){
cin>>G.vertex[i];
}
cout<<"请输入边数:"<<endl;
cin>>G.edgenum;
for(int i=0; i<G.vertexnum; i++){
for(int j=0; j<G.vertexnum; j++){
G.e[i][j] = INFINITE;
}
}
for(int i=0; i<G.edgenum; i++){
char k,j;
int w;
cout<<"输入边,起点、终点、权重:例如 A B 10"<<endl;
cin>>k>>j>>w;
G.e[findvertex(G,k)][findvertex(G,j)] = w;
}
}
int findvertex(MGraph G, char key){
for(int i=0; i<G.vertexnum; i++){
if(G.vertex[i] == key){
return i;
}
}
return -1;
}
void print(MGraph G){
for(int i=0; i<G.vertexnum; i++){
for(int j=0; j<G.vertexnum; j++){
cout<<G.e[i][j]<<" ";
}
cout<<endl;
}
}
int sign2[MAX];
void BFS(MGraph G, int v){
cout<<G.vertex[v]<<" ";
sign2[v] = 1;
queue<int> q;
q.push(v);
while(!q.empty()){
int w = q.front();
q.pop();
for(int i=0; i<G.vertexnum; i++){
if( (G.e[w][i])!=INFINITE && !sign2[i]){
cout<<G.vertex[i]<<" ";
sign2[i] = 1;
q.push(i);
}
}
}
}
int main(){
MGraph G;
createG(G);
print(G);
cout<<endl<<endl;
BFS(G,0);
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/202002101850590.png)