图的广度优先搜索遍历

在这里插入图片描述

核心代码

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]){ //判断与w所邻接的结点是否有边,和是否被访问过 
				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){
	//1.先输入顶点数和顶点字符 
	cout<<"请输入顶点数:"<<endl; 
	cin>>G.vertexnum;
	cout<<"请输入顶点字符:"<<endl;
	for(int i=0; i<G.vertexnum; i++){
		cin>>G.vertex[i];
	}
	
	//2.在输入边
	cout<<"请输入边数:"<<endl;
	cin>>G.edgenum;
	
	//3.将边的数(也就是e中元素)初始化为无穷大 
	for(int i=0; i<G.vertexnum; i++){
		for(int j=0; j<G.vertexnum; j++){
			G.e[i][j] = INFINITE;//有权图初始化边为无穷大。无权图初始化为0 
		}
	} 
	
	//4.修改已知边的权重
	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]){ //判断与w所邻接的结点是否有边,和是否被访问过 
				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;
}

在这里插入图片描述

发布了213 篇原创文章 · 获赞 104 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42363032/article/details/104252912