BFS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LH.GraphConsole
{
    class Program
    {
        private static bool[] visited;
        private static Queue<int> rootVertexQueue = new Queue<int>();

        static void Main(string[] args)
        {
            BFSTranverse();
        }

        private static void BFSTranverse()
        {
            int vertexNumber = 9;
            int edgeNumber = 15;
            Graph graph = new Graph(vertexNumber, edgeNumber);

            graph.Vertexs[0] = "A";
            graph.Vertexs[1] = "B";
            graph.Vertexs[2] = "C";
            graph.Vertexs[3] = "D";
            graph.Vertexs[4] = "E";
            graph.Vertexs[5] = "F";
            graph.Vertexs[6] = "G";
            graph.Vertexs[7] = "H";
            graph.Vertexs[8] = "I";

            graph.Edges[0, 1] = 1;
            graph.Edges[0, 5] = 1;

            graph.Edges[1, 2] = 1;
            graph.Edges[1, 8] = 1;
            graph.Edges[1, 6] = 1;

            graph.Edges[2, 3] = 1;
            graph.Edges[2, 8] = 1;

            graph.Edges[3, 8] = 1;
            graph.Edges[3, 6] = 1;
            graph.Edges[3, 7] = 1;
            graph.Edges[3, 4] = 1;

            graph.Edges[4, 7] = 1;
            graph.Edges[4, 5] = 1;

            graph.Edges[5, 6] = 1;

            graph.Edges[6, 7] = 1;

            visited = new bool[vertexNumber];
            for (int i = 0; i < vertexNumber; i++)
            {
                if (!visited[i])
                {
                    rootVertexQueue.Enqueue(i);
                    while (rootVertexQueue.Count != 0)
                    {
                        var item = rootVertexQueue.Dequeue();
                        visited[i] = true;
                        Console.WriteLine("visited vertex index: " + item);

                        for (int j = 0; j < vertexNumber; j++)
                        {
                            if (graph.Edges[item, j] == 1 && !visited[j])
                            {
                                rootVertexQueue.Enqueue(j);
                                visited[j] = true;
                            }
                        }
                    }
                }
            }
        }
    }
}

结果:
 
 

数据结构之图 Part3 – 2 遍历的更多相关文章

  1. 数据结构之图 Part3 – 1 遍历

    DFS using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  2. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  3. 重新整理数据结构与算法(c#)—— 图的深度遍历和广度遍历[十一]

    参考网址:https://www.cnblogs.com/aoximin/p/13162635.html 前言 简介图: 在数据的逻辑结构D=(KR)中,如果K中结点对于关系R的前趋和后继的个数不加限 ...

  4. 【PHP数据结构】图的遍历:深度优先与广度优先

    在上一篇文章中,我们学习完了图的相关的存储结构,也就是 邻接矩阵 和 邻接表 .它们分别就代表了最典型的 顺序存储 和 链式存储 两种类型.既然数据结构有了,那么我们接下来当然就是学习对这些数据结构的 ...

  5. 数据结构之 图论---图的深度遍历( 输出dfs的先后遍历序列 )

    图的深度遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出.遍历时,先遍历节点编 ...

  6. 数据结构实验之图论二:图的深度遍历(SDUT 2107)(简单DFS)

    题解:图的深度遍历就是顺着一个最初的结点开始,把与它相邻的结点都找到,也就是一直往下搜索直到尽头,然后在顺次找其他的结点. #include <bits/stdc++.h> using n ...

  7. 数据结构——图的深度优先遍历(邻接矩阵表示+java版本)

    ​1.深度优先遍历(DFS) 图的深度优先遍历本质上是一棵树的前序遍历(即先遍历自身,然后遍历其左子树,再遍历右子树),总之图的深度优先遍历是一个递归的过程. 如下图所示,左图是一个图,右图是图的深度 ...

  8. <数据结构>XDOJ324,325图的优先遍历

    XDOJ324.图的广度优先遍历 问题与解答 问题描述 已知无向图的邻接矩阵,以该矩阵为基础,给出广度优先搜索遍历序列,并且给出该无向图的连通分量的个数.在遍历时,当有多个点可选时,优先选择编号小的顶 ...

  9. SDUT-2107_图的深度遍历

    数据结构实验之图论二:图的深度遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 请定一个无向图,顶点编号从0到n-1 ...

随机推荐

  1. Java语言中几个常用的包

    Java采用包结构来组织和管理类和接口文件.本文介绍Java语言类库中几个常用的包,因为这几个包在软件开发与应用中经常需要用到,其中有些包是必要的.若是离开它,还真不能做事情了. 第一个包:java. ...

  2. 为什么学习c++?该怎么学?

    本人最近刚开始学习C++,准备记录下学习C++的历程.以下都是记录欢迎指教. 第一堂课,我们的老师告诉我们为什么学习C++,学习C++有啥用?这我也想了.但是我不了解C++,所以肯定是想不了多少的. ...

  3. oracle用户创建及权限设置及表空间

    建立表空间: create tablespace portx_data datafile 'D:\oracle_data\portx.dbf' size 50m autoextend on next ...

  4. ios 使用block中使用self可能产生的循环引用

    在block中调用 self,那么就会引起循环引用问题,那么这是为什么呢? 为什么self会对block进行强引用呢???? 这里推荐一篇关于block的专业文章,http://blog.csdn.n ...

  5. Qt 对话框显示控制按钮

    在对话框窗体构造函数加入 SystemDialog::SystemDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SystemDialog) ...

  6. [Android]drawable-nodpi文件夹 的作用

    把一些不能被拉伸的图片放在 drawable-nodpi 中,此图片将不会被放大,以原大小显示. 看下图: 这两个图片被放到了drawable-nodpi 中 在不同分辨率下的显示大小是一样的,不会被 ...

  7. Effective C++ -----条款31:将文件间的编译依存关系降至最低

    支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式.基于此构想的两个手段是Handle classes 和 Interface classes. 程序库头文件应该以“完全且仅有声明式 ...

  8. IT笔试题

    史上最发散的软件工程师笔试题 1.请编写代码实现如下逻辑:有一只猫和多只老鼠,猫叫了一声,老鼠都吓跑了. 2.请介绍一种数据结构和算法,代表你在这个领域的能力. 3.请从正反两面介绍一下你对代码质量的 ...

  9. 【python】判断字符串日期是否有效

    来源: http://www.jb51.net/article/66014.htm http://www.runoob.com/python/att-time-strptime.html 用time模 ...

  10. 51nod 1099 任务执行顺序 (贪心算法)

    题目:传送门. 题意:中文题. 题解:r[i]-o[i]值大的先进行.反证法:如果大的后进行,会导致空间增大,所以一定大的是先进行. #include <iostream> #includ ...