图论中搜索算法座.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图论中搜索算法座

dfss 题目: 图论中搜索算法 和最短路径算法 路志宏 Lu_zhihong@163.com 邻接矩阵存储的缺点: 这种存贮方式的空间复杂度正比于图的结点个数的平方,所以,当图中结点很多但边却很少时,采用这种结构会造成很大的浪费。 深度优先遍历算法(DFS) 递归算法 深度优先搜索的C语言实现: typedef struct node { int adjvex; //邻接点域,存放与Vi邻接的点在表头数组中的位置 struct node *next; //链域,指示下一条边或弧 }JD; //表头接点: typedef struct tnode { int vexdata; //存放顶点信息 struct node *firstarc; //指示第一个邻接点 }TD; TD ga[M]; //ga[0]不用 void traver(TD g[],int n) { int i; static int visited[M]; for(i=1;i=n;i++) visited[i]=0; for(i=1;i=n;i++) if(visited[i]==0) dfs(g,i,visited); } void dfs(TD g[],int v,int visited[]) { JD *w; int i; printf(%d ,v); visited[v]=1; w=g[v].firstarc; while(w!=NULL) { i=w-adjvex; if(visited[i]==0) dfs(g,i,visited); w=w-next; } } v1 v2 v3 v5 v4 例无向图 G e1 e2 e3 e4 e5 e6 1 2 3 4 5 v1 v2 v3 v4 v5 4 e2 2 e1 ∧ 5 e4 3 e3 1 e1 ∧ 5 e6 4 e5 2 e3 ∧ 3 e5 1 e2 ∧ 3 e6 2 e4 ∧ 如何获取顶点的度? 顶点 vi 的度为第 i 条链表中的结点数。 需要多少存储空间? n + 2e v1 v2 v4 v3 例有向图 G e1 e2 e3 e4 1 2 3 4 v1 v2 v3 v4 3 e2 2 e1 ∧ ∧ 4 e3 ∧ 1 e4 ∧ 邻接矩阵与邻接表 存储空间 求顶点的度 求顶点的邻接顶点 邻接表省 一样 一样 判断两个顶点是否关联 邻接矩阵方便 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 v1 v2 v3 v4 v5 4 e2 2 e1 ∧ 5 e4 3 e3 1 e1 ∧ 5 e6 4 e5 2 e3 ∧ 3 e5 1 e2 ∧ 3 e6 2 e4 ∧ 3 图的遍历 与树的遍历类似,如果从图中某一顶点出发访遍图中所有顶点,且使每一个顶点仅被访问一次,这一过程称为图的遍历。 图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。 通常有两条遍历图的路径: 深度优先搜索、广度优先搜索。 图的遍历相对复杂,为了避免同一个顶点被访问多次,增设一个辅助的布尔数组 visited[0 . . n-1] 指示顶点是否已被访问过。 3.1 深度优先搜索 深度优先搜索是类似于树的一种先序遍历 v1 v2 v3 v5 v4 v6 v7 v8 图可分为三部分: 基结点 第一个邻接结点导出的子图 其它邻接顶点导出的子图 深度优先搜索顺序: v1 v2 v4 v8 v5 v3 v6 v7 1. 从图中某个顶点 v 出发,访问此顶点; 2. 然后依次从 v 的未被访问的邻接点出发进行深度优先遍历; 3. 直至图中所有和 v 有路径相通的顶点都被访问到。 4. 若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点做起始点,重复上述过程,直至图中所有顶点都被访问到。 算法描述: 开始 访问V0,置标志 求V0邻接点 有邻接点w 求下一邻接点 w?V0 W访问过 结束 N Y N Y DFS 开始 标志数组初始化 Vi=1 Vi访问过 DFS Vi=Vi+1 Vi==Vexnums 结束 N N Y Y visited[v] = TRUE ; printf(v) ; //访问此顶点 for (

文档评论(0)

nanjin + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档