图的遍历——DFS
原创
图的遍历有DFS和BFS两种,现选用DFS遍历图。
存储图用邻接矩阵,图有v个顶点,e条边,邻接矩阵就是一个VxV的矩阵;
若顶点1和顶点5之间有连线,则矩阵元素[1,5]置1,若是无向图[5,1]也
置1,两顶点之间无连线则置无穷,顶点到顶点本身置0。
例如:

邻接矩阵为:

遍历思路:
随便选择一未访问过的顶点v1作为遍历起点,访问v1,再选择与v1连接的点v2作为起始点,访问v2;
再选择与v2连接的点作为起始点v3,访问v3,假设v3是孤立点,则v3不能往下访问,回溯到v2,再以v2
作为起点,访问与v2连接的其他未被访问过的顶点,假设是v4,则再以v4为顶点,访问v4,再选择与v4
连接的顶点为起始点......直到全部顶点都被访问过一遍。
在上图中,假设以顶点2为起点进行图的遍历,则先访问顶点2,再访问顶点1,注意,并不是先访问
3,因为在扫描邻接矩阵时,在每行是从左向右扫描的;再访问顶点0,再深搜下去访问顶点4,访问顶点
5,一直回溯,回溯到顶点2,再访问顶点3;访问顺序为:2 1 0 4 5 3
Java:
import java.util.*;
public class 图的遍历_dfs {
static int v; //顶点数
static int e; //边数
static int arr[][];
static int book[]; //标识顶点是否访问
static int max=99999; //无穷
static int total=0; //统计已访问顶点个数
static void graph_dfs(int ver) { //ver表示顶点
total++;
book[ver]=1; //标记顶点ver已经访问过
System.out.print(ver+" ");
if(total==v) {
return;
}
for(int i=0;i<v;i++) {
if(arr[ver][i]==1 && book[i]==0) {
graph_dfs(i);
}
}
return;
}
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
v=reader.nextInt();
e=reader.nextInt();
arr=new int[v][v];
book=new int[v];
//邻接矩阵初始化
for(int i=0;i<v;i++) {
book[i]=0;
for(int j=0;j<v;j++) {
if(i==j) {
arr[i][j]=0;
}
else {
arr[i][j]=max;
}
}
}
//读入边
for(int i=0;i<e;i++) {
int first_E=reader.nextInt();
int second_E=reader.nextInt();
arr[first_E][second_E]=1;
arr[second_E][first_E]=1;
}
graph_dfs(0); //从顶点0开始遍历
}
}
18:08:52
2018-07-22
图的遍历——DFS的更多相关文章
- 图的遍历DFS
图的遍历DFS 与树的深度优先遍历之间的联系 树的深度优先遍历分为:先根,后根 //树的先根遍历 void PreOrder(TreeNode *R){ if(R!=NULL){ visit(R); ...
- 图的遍历——DFS(矩形空间)
首先,这里的图不是指的我们一般所说的图结构,而是大小为M*N的矩形区域(也可以看成是一个矩阵).而关于矩形区域的遍历问题经常出现,如“寻找矩阵中的路径”.“找到矩形区域的某个特殊点”等等之类的题目,在 ...
- 图的遍历——DFS和BFS模板(一般的图)
关于图的遍历,通常有深度优先搜索(DFS)和广度优先搜索(BFS),本文结合一般的图结构(邻接矩阵和邻接表),给出两种遍历算法的模板 1.深度优先搜索(DFS) #include<iostrea ...
- 图的遍历——DFS(邻接矩阵)
递归 + 标记 一个连通图只要DFS一次,即可打印所有的点. #include <iostream> #include <cstdio> #include <cstdli ...
- 图的遍历---DFS
类型一:邻接表 题目一:员工的重要性 题目描述 给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id. 比如,员工1是员工2的领导,员工2是员工3的领导.他们相应的重要度 ...
- 图的遍历(DFS、BFS)
理论: 深度优先搜索(Depth_Fisrst Search)遍历类似于树的先根遍历,是树的先根遍历的推广: 广度优先搜索(Breadth_First Search) 遍历类似于树的按层次遍历的过程: ...
- 16.boost图深度优先遍历DFS
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...
- 图的遍历[DFS][BFS]
#include<iostream> #include<iostream> #include<cstring> #include<queue> #inc ...
- 图的数据结构的实现与遍历(DFS,BFS)
//图的存储结构:const int MAXSIZE = 10;//邻接矩阵template<class T>class MGraph {public: MGraph(T a[], ...
随机推荐
- Ubuntu14.04安装Matlab2014a
尝试在Ubuntu14.04下安装matlab2014a已经有两天了,即便是照着csdn上的步骤进行安装依然出现了不少问题,究其原因是对linux下的命令不理解,下面就自己摸索结合博客内容总结一下安装 ...
- 几种系统下查看FC HBA卡信息的方法
几种系统下查看FC HBA卡信息的方法 目 录 几种系统下查看FC HBA卡信息的方法 FC HBA卡概述 Windows系统下查看FC HBA卡的信息 Linux系统下查看FC HBA卡的信息 U ...
- 【转】wireshark抓包工具详细说明及操作使用
wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了. 为了安全 ...
- java从键盘输入若干数,求其最大值,最小值,平均值。等等
总结:有一定基础的人,应该发现第一个程序可以运行,其实它有个致命的错误.有谁能一眼看出来呢?第二个程序是对的. 这个题目求最大值,最小值,平均值我不会求,不知道这个if判断放在类的外面还是main函数 ...
- SizeGripStyle 枚举
成员名称 说明 Auto 需要时会自动显示大小调整的箭头图标 Hide 大小调整的箭头图标被隐藏. (SizeGripStyle=Hide,禁用拖动窗体右下角可以改变大小的功能) Sho ...
- Dynamics CRM 2011 WebResources
Type Limitation Capabilities Usage Images JPG, PNG, GIF, ICO Custom entity icons Icons for custom ...
- 【phonegap】下载文件
<!-- 打包的时候phonegap自己会添加这个文件--> <script type="text/javascript" charset="utf-8 ...
- mongoDB的了解
一.什么是mongoDB? 1.MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能. 2.MongoDB 旨在为WEB ...
- js中,清空对象(删除对象的属性)
在项目中,有些对象用完后需要重置,下面简单介绍下JS中清除对象的方法.方法如下: 方法一:字面量定义对象 第一步,定义一个空对象并打印出来,代码和效果: 代码: var student = {};co ...
- 深入剖析SolrCloud(二)
作者:洞庭散人 出处:http://phinecos.cnblogs.com/ 本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由 ...