我是靠谱客的博主 体贴斑马,最近开发中收集的这篇文章主要介绍图的遍历——BFS(队列实现),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <malloc.h>
using namespace std;
const int VERTEX_NUM = 20;
const int INFINITY = 0x7fffffff;
// 最大int型数,表示权的无限值
bool vis[VERTEX_NUM];
class Graph {
public:
int vexNum;
int edgeNum;
int vex[VERTEX_NUM];
int arc[VERTEX_NUM][VERTEX_NUM];
};
void createGraph(Graph &G)
{
cout << "please input vexNum and edgeNum: ";
cin >> G.vexNum >> G.edgeNum;
for (int i = 0; i != G.vexNum; ++i) {
cout << "please input no" << i+1 << " vertex: ";
cin >>
G.vex[i];
}
for (int i = 0; i != G.vexNum; ++i) {
for (int j = 0; j != G.vexNum; ++j) {
G.arc[i][j] = INFINITY;
}
}
for (int k = 0; k != G.edgeNum; ++k) {
cout << "please input the vertex of edge(vi, vj) and weight: ";
int i, j, w;
cin >> i >> j >> w;
G.arc[i][j] = w;
G.arc[j][i] = G.arc[i][j];
// 无向图
}
}
void BFSTraverse(const Graph &G)
{
memset(vis, false, VERTEX_NUM);
queue<int> q;
for (int i = 0; i != G.vexNum; ++i) {
if (!vis[i]) {
vis[i] = true;
cout << G.vex[i] << " ";
q.push(i);
while (!q.empty()) {
int m = q.front();	// 队列的作用正在于此
q.pop();
// ...
for (int j = 0; j != G.vexNum; ++j) {
if (G.arc[m][j] != INFINITY && !vis[j]) {
cout << G.vex[j] << " ";
q.push(j);
vis[j] = true;
}
}
}
}
}
}
int main()
{
Graph G;
createGraph(G);
BFSTraverse(G);
return 0;
}

  

转载于:https://www.cnblogs.com/xzxl/p/8646694.html

最后

以上就是体贴斑马为你收集整理的图的遍历——BFS(队列实现)的全部内容,希望文章能够帮你解决图的遍历——BFS(队列实现)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部