关于图的遍历,通常有深度优先搜索(DFS)和广度优先搜索(BFS),本文结合一般的图结构(邻接矩阵和邻接表),给出两种遍历算法的模板 1.深度优先搜索(DFS) #include<iostream> #include<unordered_map> #include<queue> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #…
理论: 深度优先搜索(Depth_Fisrst Search)遍历类似于树的先根遍历,是树的先根遍历的推广: 广度优先搜索(Breadth_First Search) 遍历类似于树的按层次遍历的过程: java实现 Vertex.java package 图; public class Vertex{ String value; boolean isVisited; Vertex(String value) { this.value=value; this.isVisited=false; }…
图的遍历DFS 与树的深度优先遍历之间的联系 树的深度优先遍历分为:先根,后根 //树的先根遍历 void PreOrder(TreeNode *R){ if(R!=NULL){ visit(R); //访问根节点 while(R还有下一个子树T) PreOrder(T); //先根遍历下一棵子树 } } 新找到的相邻结点一定是没有访问过的. 先根遍历序列:1,2,5,6,3,4,7,8 图的深度优先遍历 bool visited[MAX_VERTEX_NUM]; //初始值都为false vo…
#include<iostream> #include<iostream> #include<cstring> #include<queue> #include<cstdio> using namespace std; int m,n,maxn=0x7fffffff; ][]; ]={false}; queue<int>str; void BFS(int ); void DFS(int ); int main() { memset(s…
首先,这里的图不是指的我们一般所说的图结构,而是大小为M*N的矩形区域(也可以看成是一个矩阵).而关于矩形区域的遍历问题经常出现,如“寻找矩阵中的路径”.“找到矩形区域的某个特殊点”等等之类的题目,在笔试的编程题中经常会出现.下面就这种类型的问题给出一个较为通用的模板: 利用深度优先搜索(DFS) #include<iostream> #include<unordered_map> #include<queue> #include<cstring> #inc…
原创 图的遍历有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…
类型一:邻接表 题目一:员工的重要性 题目描述 给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id. 比如,员工1是员工2的领导,员工2是员工3的领导.他们相应的重要度为15, 10, 5.那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []].注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中. 现在输入一个公司的所有员工信息,以及单个员工id,…
递归 + 标记 一个连通图只要DFS一次,即可打印所有的点. #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <malloc.h> using namespace std; const int VERTEX_NUM = 20; const int INFINITY = 0x7fffffff; // 最大int型数,表示权的无限…
DFS: 该DFS框架以2D坐标范围为例,来体现DFS算法的实现思想 #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int maxn=100; bool vst[maxn][maxn]; //访问标记 int map[maxn][maxn]; //坐标范围 int dir[4][2]={0,1,0,-1,1,0,-1,0}; //方向向量,(x,y)周围的四…
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjacency_matrix.hpp> #include <boost\graph\graph_utility.hpp> #include <boost/graph/graph_traits.hpp> //图(链表实现) #include <boost/graph/adjacen…