广度优先搜索遍历图【邻接矩阵/邻接表】

邻接矩阵存图 

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int ma[105][105];
bool vis[105];
int n,m;// n 顶点数

void bfs(int root){
	queue<int>q;
	q.push(root);
	vis[root]=1;
	while(!q.empty()){
		int u=q.front();
		cout<<"->"<<u;
		q.pop();
		for(int i=1;i<=n;i++){
			if(ma[u][i]!=0 && vis[i]==0){
				vis[i]=1;
				q.push(i);
			}
		}
	}
}

void bfstrave(){//处理非连通图
    for(int i=1;i<=n;i++){
        if(vis[i]==0) bfs(i);
    }
}

int main(){
	int x,y;
	memset(ma,0,sizeof(ma));
	memset(vis,0,sizeof(vis));
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		ma[x][y]=1;
		ma[y][x]=1;
	}
	bfs(1);
	return 0;
}

邻接表存图 

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f

vector<int> vec[105];
bool vis[105];
int n,m;

void bfs(int x){
    queue<int>q;
    vis[x]=1;
    q.push(x);
    while(!q.empty()){
        int u=q.front();q.pop();
        cout<<"->"<<u;
        for(int i=0;i<vec[u].size();i++){
            if(vis[vec[u][i]]==0){
                vis[vec[u][i]]=1;
                q.push(vec[u][i]);
            }
        }
    }
}

void bfstrave(){//处理非连通图
    for(int i=1;i<=n;i++){
        if(vis[i]==0) bfs(i);
    }
}

int main(){
    memset(vis,0,sizeof(vis));
    cin>>n>>m;
    int x,y;
    for(int i=1;i<=m;i++){
        cin>>x>>y;
        vec[x].push_back(y);
        vec[y].push_back(x);
    }
    bfs(1);
    return 0;
}

 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/qq_41333844/article/details/84259996
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞