分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

图的定义

图的定义大体上有以下两种方式。

二元组的定义

      图G是一个二元组(V,E),其中V称为顶点集,E称为边集。它们亦可写成V(G)和E(G)。E的元素是一个二元组数对,用(x,y)表示,其中x,y∈V。

三元组的定义

一个,是指一个三元组(V,E,I),其中V称为顶点集(Vertices Set),E称为边集(Edges Set),E与V不相交;I称为关联函数,I将E中的每一个元素映射到VxV。如果I(e)=(u,v)(e∈E;u,v∈V),那么称边e连接顶点u,v,而u,v则称作e的端点,u,v此时关于e相邻。同时,若两条边i,j有一个公共顶点u,则称i,j关于u相邻。

图的遍历

图的遍历方式有两种,分别是深度优先遍历和广度优先遍历。

  图的深度优先遍历是树的先序遍历的推广,它的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi进行访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则退回到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点w,从w出发按照同样的方法进行遍历,直到图中所有顶点都被访问。

Boolean visited[MAX_VERTEX_NUM]; // 访问标志数组。
Status (*VisitFunc)(int v); // VisitFunc是访问函数,对图的每个顶点调用该函数。void DFSTraverse (Graph G, Status(*Visit)(int v)) // 图的深度优先遍历。
{VisitFunc = Visit;for(v = 0; v < G.vexnum; ++v)visited[v] = FALSE; // 标志数组初始化。for(v = 0; v < G.vexnum; ++v)if(!visited[v])DFS(G, v); // 对尚未访问的顶点调用DFS。
}void DFS(Graph G, int v) // 从第v个顶点出发递归地深度优先遍历图G。
{visited[v] = TRUE;VisitFunc(v); // 访问第v个顶点。for(w = FirstAdjVex(G,v); w >= 0; w = NextAdjVex(G,v,w))// FirstAdjVex返回v的第一个邻接顶点,若顶点在G中没有邻接顶点,则返回空(0)。// 若w是v的邻接顶点,NextAdjVex返回v的(相对于w的)下一个邻接顶点。// 若w是v的最后一个邻接点,则返回空(0)。if(!visited[w])DFS(G, w); // 对v的尚未访问的邻接顶点w调用DFS。
}

  图的广度优先遍历是树的按层次遍历的推广,它的基本思想是:首先访问初始点vi,并将其标记为已访问过。接着访问vi的所有未被访问过的邻接点vi1,vi2,...,vit,并均标记为已访问过。然后再按照vi1,vi2,...,vit的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过。依次类推,直到图中所有和初始点vi有路径相通的顶点都被访问。

Boolean visited[MAX_VERTEX_NUM]; // 访问标志数组。
Status (*VisitFunc)(int v); // VisitFunc是访问函数,对图的每个顶点调用该函数。void BFSTraverse (Graph G, Status(*Visit)(int v)) // 图的广度优先遍历。
{VisitFunc = Visit;for(v = 0; v < G.vexnum, ++v)visited[v] = FALSE;initQueue(Q); // 置空辅助队列Q。for(v = 0; v < G.vexnum; ++v)if(!visited[v]){visited[v] = TRUE;VisitFunc(v);EnQueue(Q, v); // v入队列while(!QueueEmpty(Q)){DeQueue(Q, u); // 队首元素出队并置为u。for(w = FirstAdjVex(G,u); w >= 0; w = NextAdjVex(G,u,w))if(!Visited[w]) // w为u的尚未访问的邻接顶点。{Visited[w] = TRUE;VisitFunc(w);EnQueue(Q, w);}}}
}

数据结构 - 图(C++)相关推荐

  1. 数据结构--图(Graph)详解(四)

    数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...

  2. 数据结构--图(Graph)详解(三)

    数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...

  3. 数据结构--图(Graph)详解(二)

    数据结构–图(Graph)详解(二) 文章目录 数据结构--图(Graph)详解(二) 一.图的存储结构 1.图的顺序存储法 2.图的邻接表存储法 3.图的十字链表存储法 4.图的邻接多重表存储法 二 ...

  4. 数据结构--图(Graph)详解(一)

    数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...

  5. 四色着色问题 c语言编程,数据结构-图着色问题

    7-38 图着色问题 (25 分) 图着色问题是一个著名的NP完全问题.给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要 ...

  6. 【数据结构(C语言)】数据结构-图

    图 文章目录 图 一.基本概念 1.图的定义 2.约定符号 3.分类 4.子图 5.路 6.其他术语 7.ADT 二.存储结构 1.邻接矩阵(数组) 2.邻接表 三.基本算法 1.遍历 2.求无向图的 ...

  7. 数据结构 --- 图的遍历 DFS、BFS

    什么是DFS.BFS? 一条线走到底,深度优先遍历,每一个顶点只遍历.只打印一次的方式:DFS.BFS 数据结构 --- 图的存储 单纯地把邻接顶点的邻接顶点打印出来,顶点重复遍历,打印多次 从 A→ ...

  8. 数据结构——图(存储结构)

    数据结构--图 图的定义和基本术语 图的类型定义 图的存储结构 数组(邻接矩阵表示法) 网(即有权图)的邻接矩阵表示法 邻接表 邻接表表示法(链式) 图的邻接表存储表示 采用邻接表表示法创建无向网 邻 ...

  9. 数据结构——图的定义和实现

    这里写目录标题 图的定义 各种图的定义 无向边 有向边 图的顶点与边的关系 连通图生成树 图的各种实现 在引入邻接矩阵之前先介绍一下图的相关概念(概念比前树啥的面稍微复杂一点) 图的定义 之前学了线性 ...

  10. 数据结构——图的邻接表存储

    数据结构--图的邻接表存储 功能实现: (1)图的邻接矩阵的储存 (2)深度优先遍历 (3).广度优先遍历 (4)求结点的度 (5)判断图是否连通 (6)求最小生成树 参考代码 #include &l ...

最新文章

  1. IOS开发CALayer隐式动画
  2. Android 内存管理 amp;Memory Leak amp; OOM 分析
  3. dynamic_caast操作符
  4. 什么代码才是线程安全的
  5. python返回字符串长度的函数_Python如何查找字符串的长度?(代码示例)
  6. 【Python 必会技巧】lambda 表达式(匿名函数)及其在内置函数中的应用
  7. leetcode170. 两数之和 III - 数据结构设计
  8. tar+openssl加密压缩解压缩
  9. [转]python进阶到高阶大全
  10. 空间中任一点到超平面的距离公式的推导过程
  11. SLAM系统原理推导
  12. 最新高德地图使用——申请key、显示地图
  13. 柳传志:对杨元庆“有信心
  14. 官方通知:考研国家线预计4月中旬公布
  15. 机器学习之聚类算法(五)层次聚类代码实现及模型可视化
  16. 巴菲特致股东的信pdf_股神巴菲特发布致股东公开信,接班人仍是个谜
  17. php 七牛视频鉴黄,API调用视频鉴黄v1(不推荐)
  18. excel验证身份证号码是否正确
  19. DeepMind重磅开源强化学习框架!覆盖28款游戏,24多个算法
  20. 胡水生:中小型企业如何应对互联网的发展

热门文章

  1. 自动化运维---python
  2. 科技力量赋予 SK5 代理 HTTP 代理 IP 网络无限可能
  3. [揭秘]电商“一元购”后又现“0元单”,究竟是个什么“鬼”?
  4. “亚北极生存训练”---哈佛人的不同
  5. 最小生成树普里姆算法Prim
  6. C++编程常用头文件及其包含函数汇总
  7. 汇正财经骗局?中国银行行业 China Banks存贷款定价机制详解
  8. 头歌--实验四 蛮力法
  9. idea 控制台乱码问题的问题
  10. Java(二) 运算符 方法定义与使用