原创


裸一篇图的BFS遍历,直接来图:

简单介绍一下BFS遍历的过程:

  以上图为例子,从0开始遍历,访问0,按大小顺序访问与0相邻的所有顶点,即先访问1,再访问2;

至此顶点0已经没有作用了,因为其本身和与其所有相邻的顶点都已被访问,将其出队列,我们用队列

存储已访问过的顶点;然后顺着队列,访问顶点1和所有与顶点1相邻的顶点,这里没有,所有访问顶点

2和所有与顶点2相邻的结点,即3和4,注意,是先访问3,再访问4,因为采用邻接矩阵来存储图。

Java:

import java.util.*;

public class 图的遍历_bfs {

    static int v;    //顶点数
static int e; //边数
static int array[][]; //邻接矩阵
static int book[]; //标记
static int que[]; //队列
static int max=99999; //无穷 public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
v=reader.nextInt();
e=reader.nextInt();
array=new int[v][v];
book=new int[v];
que=new int[v];
//矩阵初始化
for(int i=0;i<v;i++) {
for(int j=0;j<v;j++) {
if(i==j) {
array[i][j]=0;
}
else {
array[i][j]=max;
}
}
}
//读入边
for(int i=0;i<e;i++) {
int first_One=reader.nextInt();
int second_Two=reader.nextInt();
array[first_One][second_Two]=1;
array[second_Two][first_One]=1;
}
int head=0; //头指针
int tail=0; //尾指针
que[tail]=0; //从顶点0开始遍历
book[0]=1;
tail++;
while(head<tail) {
for(int i=0;i<v;i++) {
if(array[ que[head] ][i]==1 && book[i]==0) {
que[tail]=i; //加入队列
tail++;
book[i]=1;
}
if(tail>v-1) {
break;
}
}
head++;
}
for(int i=0;i<v;i++) {
System.out.print(que[i]+" ");
}
} }

测试用例:

输入:

6 5
0 1
1 2
2 3
0 4
4 5

输出:

0 1 4 2 5 3

22:34:03

2018-07-22

图的遍历——BFS的更多相关文章

  1. 图的遍历BFS

    图的遍历BFS 广度优先遍历 深度优先遍历 可以进行标记 树的广度优先遍历,我们用了辅助的队列 bool visited[MAX_VERTEX_NUM] //访问标记数组 //广度优先遍历 void ...

  2. 图的遍历BFS广度优先搜索

    图的遍历BFS广度优先搜索 1. 简介 BFS(Breadth First Search,广度优先搜索,又名宽度优先搜索),与深度优先算法在一个结点"死磕到底"的思维不同,广度优先 ...

  3. Kruskal和prime算法的类实现,图的遍历BFS算法。

    一.图的遍历 #include<iostream> #include<queue> #include<vector> using namespace std; in ...

  4. 模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra

    广搜 bfs //bfs #include<iostream> #include<cstdio> using namespace std; ],top=,end=; ][]; ...

  5. 图的遍历——BFS(队列实现)

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...

  6. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

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

    广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不 ...

  8. 图的遍历——DFS和BFS模板(一般的图)

    关于图的遍历,通常有深度优先搜索(DFS)和广度优先搜索(BFS),本文结合一般的图结构(邻接矩阵和邻接表),给出两种遍历算法的模板 1.深度优先搜索(DFS) #include<iostrea ...

  9. 图的遍历算法:DFS、BFS

    在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为深度优先搜索(DFS)和广度优先搜索(BFS). DFS(深度优先搜索)算法 Depth-First-Search 深度优先 ...

随机推荐

  1. POI 单元格

    OI 单元格合并中的CellRangeAddress 参数: CellRangeAddress(int, int, int, int) 参数:起始行号,终止行号, 起始列号,终止列号 sheet.ad ...

  2. VMware网络模式介绍

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式). Bridged 模式: 在桥接模式下,VMware虚拟机里的系统就像是  ...

  3. python 安装相关命令-汇总

    Microsoft Windows [版本 10.0.14393] (c) 2016 Microsoft Corporation.保留所有权利. C:\Windows\system32>pyth ...

  4. php-fpm使用

    /usr/local/php/sbin/php-fpm  --help -c <path>|<file> Look for php.ini file in this direc ...

  5. TCP之一:传输控制协议(Transmission Control Protocol, TCP)

    TCP协议主为了在主机间实现高可靠性的包交换传输协议.本文将描述协议标准和实现的一些方法.因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但 ...

  6. Netty实现简单HTTP服务器

    netty package com.dxz.nettydemo.http; import java.io.UnsupportedEncodingException; import io.netty.b ...

  7. ejs的简单应用

    获取数据 var init = function(){ api.my_bean_list({ },function(datas){ console.log(datas); if (datas.errn ...

  8. C Primer Plus学习笔记(十三)- 结构和其他数据形式

    建立结构声明 结构声明(structure declaration)描述了一个结构的组织布局 struct book { char title[MAXTITL]; char author[MAXAUT ...

  9. Patator-一款很好用的爆破工具

    项目地址:https://github.com/lanjelot/patator 打开文件夹 运行一下文件查看帮助 python patator.py --help 这里有很多的爆破选项,就不一一截图 ...

  10. 使用 Ansible 管理 MySQL 复制

    Ansible 是一个新兴的 IT 自动化工具.本文将介绍如何通过 Ansible 配置及管理 MySQL 主.从复制环境,实现部署过程自动化,体验 Ansible 简单快速带来的快感. 简介: An ...