概述
基本思想:
1:从图中某个顶点Vi出发,先访问Vi
2:选择一个与刚访问的顶点Vi相邻且未访问过的顶点,然后访问该顶点。接而以该顶点为新顶点,重复本步骤,知道当前顶点没有未访问的邻接点为止。
3:返回前一个访问过的且仍有未访问的邻接点的顶点,找出并访问该顶点的下一个未访问的邻接点,重复执行步骤2
这种搜索方式类似于树的先序遍历,是树的先序遍历的推广
以邻接表为存储结构的深度优先搜索遍历算法:
1 //以邻接表为存储结构的深度优先搜索遍历算法 2 3 #include<stdio.h> 4 #include<malloc.h> 5 #define MAX_VER 100 //最大顶点数100 6 7 typedef struct node{ //定义表节点 8 int adjvex; //邻接顶点域 9 struct node *next; //指向下一个邻接顶点的指针域 10 //char info; //若为网图,表示边上信息,应增加一个数据域info 11 }Arcnode; 12 typedef struct vexnode{ //定义头节点 13 int vertex; //顶点域 14 Arcnode *firstarc; //边表头指针 15 }Vexnode; //Vexnode是以邻接表的形式存储图类型 16 17 Vexnode adjlist[MAX_VER]; //定义头节点数组 18 19 int creatadlist() //建立邻接表 20 { 21 Arcnode *ptr; 22 int arcnum,vexnum,k,v1,v2; 23 printf("请输入顶点数与边数:n"); 24 scanf("%d %d",&vexnum,&arcnum); 25 for(k = 1;k <= vexnum;k++) 26 adjlist[k].firstarc = 0; 27 for(k = 0;k < arcnum;k++) //为adjlist数组的各元素分别创建各自的链表 28 { 29 printf("v1,v2 = "); 30 scanf("%d %d",&v1,&v2); 31 ptr = (Arcnode *)malloc(sizeof(Arcnode)); 32 ptr->adjvex = v2; 33 ptr->next = adjlist[v1].firstarc; 34 adjlist[v1].firstarc = ptr; 35 //如果是有向图,下面四句话要删除 36 ptr = (Arcnode *)malloc(sizeof(Arcnode)); 37 ptr->adjvex = v1; 38 ptr->next = adjlist[v2].firstarc; 39 adjlist[v2].firstarc = ptr; 40 } 41 42 return vexnum; 43 } 44 45 int dfs(int v) 46 { 47 int w; 48 Arcnode *p; 49 p = adjlist[v].firstarc; 50 printf("%4d",v); //输出访问顶点 51 adjlist[v].vertex = 1; //顶点标志域置为1,表明已经访问过 52 while(p != NULL) 53 { 54 w = p->adjvex; 55 if(adjlist[w].vertex == 0) 56 dfs(w); //如果该顶点未访问过则递归调用,从该顶点出发,沿着它的各邻接点向下搜索 57 p = p->next; 58 } 59 60 return 0; 61 } 62 63 int main() 64 { 65 int n; 66 Arcnode *p; 67 n = creatadlist(); //建立邻接表并返回顶点个数 68 69 printf("所建图的邻接表为:n"); 70 for(int i = 1;i <= n;i++) 71 { 72 printf("%d==>",i); 73 p = adjlist[i].firstarc; 74 while(p != NULL) 75 { 76 printf("-- -->%d",p->adjvex); 77 p = p->next; 78 } 79 printf("n"); 80 } 81 printf("输入深度优先搜索的起始节点:n"); 82 scanf("%d",&n); 83 printf("图的深度优先搜索序列DFS:"); 84 dfs(n); 85 86 return 0; 87 }
转载于:https://www.cnblogs.com/mlblog27/p/9569692.html
最后
以上就是威武自行车为你收集整理的遍历图-深度优先的全部内容,希望文章能够帮你解决遍历图-深度优先所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复