BFS广度优先遍历

队列实现广度优先遍历

#include <iostream>
#include <queue>
using namespace std;

int  visit[5]={0};

typedef struct {
        char vexs[5];
        int AdjMatrix[5][5];
        int vexnum;
        }Graph;

Graph g={
    {‘a‘,‘b‘,‘c‘,‘d‘,‘e‘},
      {
       0,1,0,1,0,
       1,0,1,0,1,
       0,0,0,1,1,
       1,0,0,0,0,
       0,1,1,0,0
      } ,
      5
      };

 queue<int> list;;

int BFS(Graph *g,int nowVex){

    if(visit[nowVex]==0)
    cout<<"visit "<<g->vexs[nowVex]<<" ";
    visit[nowVex]=1;

    if(list.size()!=0)
    list.pop();
    for(int i=0;i<g->vexnum;i++)
    {
        if(g->AdjMatrix[nowVex][i]==1&&visit[i]==0)
        {
            list.push(i);
        //    cout<<"nowVex "<<nowVex<<" push "<<g->vexs[i]<<endl;
        }
    }

    while(list.size()!=0){
         //  cout<<" list front is "<<g->vexs[list.front()]<<endl;
           BFS(g,list.front());
    }
    return 0;
}

int main()
{
    BFS(&g,0);
}
时间: 2024-11-07 01:16:49

BFS广度优先遍历的相关文章

广度优先遍历-BFS、深度优先遍历-DFS

广度优先遍历-BFS 广度优先遍历类似与二叉树的层序遍历算法,它的基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问的顶点w1 w2 w3....wn,然后再依次访问w1 w2 w3....wn的所有未被访问的邻接顶点:再从这些访问过的顶点出发,再访问它们所有未被访问过的邻接顶点......依次类推,直到图中的所有点都被访问为止.类似的思想还将应用于Dijkstra单源最短路径算法和Prim最小生成树算法. python实现二叉树的建立以及遍历(递归前序.中序.后序遍历,队栈前

如何实现广度优先遍历(BFS)

BFS过程: 一:访问顶点V,并标记V为已经访问 二:顶点V入队列 三:如果队列非空,进行执行,否则算法结束 四:出队列取得对头顶点u,如果顶点未被访问,就访问该顶点,并标记该顶点为已经访问 五:查找u的第一个邻接节点w 六:如果w不存在,则转到步骤三,否则循环执行 a. 如果w没有被访问过,则先把w入队列 b.查找顶点u的下一个邻接节点,记为w,并转到步骤六 上图使用BFS访问顺序为: A BEDC 队列的变化过程如下: A B BE ED D C 代码如下: #include<iostrea

怎样实现广度优先遍历(BFS)

BFS过程: 一:訪问顶点V,并标记V为已经訪问 二:顶点V入队列 三:假设队列非空.进行运行,否则算法结束 四:出队列取得对头顶点u,假设顶点未被訪问,就訪问该顶点,并标记该顶点为已经訪问 五:查找u的第一个邻接节点w 六:假设w不存在.则转到步骤三,否则循环运行 a. 假设w没有被訪问过.则先把w入队列 b.查找顶点u的下一个邻接节点,记为w,并转到步骤六 上图使用BFS訪问顺序为: A BEDC 队列的变化步骤例如以下: A B BE ED D C 代码例如以下: #include<ios

算法学习 - 图的广度优先遍历(BFS) (C++)

广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不懂的人.请先学下图的存储方法.在我的之前博客里. 传送门:图表示方法 然后我们如果有一个图例如以下: 节点1->3->NULL 节点2->NULL 节点3->2->4->NULL 节点4->1->2->NULL 这样我们已经知道这是一个什么图了. 如果我们

饥饿的小易(枚举+广度优先遍历(BFS))

题目描述 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7.因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次.贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等).小易需要你帮忙计算最少需要使用多少次神秘力量就能吃到贝壳. 输入描述: 输入一个初始位置x_0

深度优先遍历(DFS)和广度优先遍历(BFS)

1 图的两种存储方式 1.1 邻接矩阵(Adjacency Matrix) 1.1.1 原理 用一维数组存储图中顶点信息:用二维数组(矩阵)存储图中的边和弧的信息.对于无向图来说,如果顶点i与顶点j之间有边,就将A[i][j]和A[j][i]标记为1:对于有向图来说,如果顶点i和顶点j之间,有一条箭头从顶点i指向顶点j的边,就将A[i][j]标记为1,有箭头从顶点j指向顶点i的边,就将A[j][i]标记为1.对于有权图,数组中存储相应权重. 邻接矩阵可表示为: vertex[4] = {v0,

《图论》——广度优先遍历算法(BFS)

十大算法之广度优先遍历: 本文以实例形式讲述了基于Java的图的广度优先遍历算法实现方法,详细方法例如以下: 用邻接矩阵存储图方法: 1.确定图的顶点个数和边的个数 2.输入顶点信息存储在一维数组vet中 3.初始化邻接矩阵. 4.依次输入每条边存储在邻接矩阵array中 输入边依附的两个顶点的序号i,j. 将邻接矩阵的第i行第j列的元素值置为1: 将邻接矩阵的第j行第i列的元素值置为1: 广度优先遍历实现: 1.初始化队列Q 2.訪问顶点v:ifVisit[v]=1;顶点v入队Q; 3.whi

广度优先遍历算法(BFS)

十大算法之广度优先遍历: 本文以实例形式讲述了基于Java的图的广度优先遍历算法实现方法,具体方法如下: 用邻接矩阵存储图方法: 1.确定图的顶点个数和边的个数 2.输入顶点信息存储在一维数组vet中 3.初始化邻接矩阵: 4.依次输入每条边存储在邻接矩阵array中 输入边依附的两个顶点的序号i,j: 将邻接矩阵的第i行第j列的元素值置为1: 将邻接矩阵的第j行第i列的元素值置为1: 广度优先遍历实现: 1.初始化队列Q 2.访问顶点v:ifVisit[v]=1;顶点v入队Q; 3.while

图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析

1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直至所有的顶点都被访问过. 在此我想用一句话来形容 “不到南墙不回头”. 1.1 无向图的深度优先遍历图解 以下"无向图"为例: 对上无向图进行深度优先遍历,从A开始: 第1步:访问A. 第2步:访问B(A的邻接点). 在第1步访问A之后,接下来应该访问的是