收藏 分享(赏)

DFS(图的深度优先搜索).docx

上传人:11xg27ws 文档编号:6330786 上传时间:2019-04-07 格式:DOCX 页数:4 大小:15.84KB
下载 相关 举报
DFS(图的深度优先搜索).docx_第1页
第1页 / 共4页
DFS(图的深度优先搜索).docx_第2页
第2页 / 共4页
DFS(图的深度优先搜索).docx_第3页
第3页 / 共4页
DFS(图的深度优先搜索).docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、DFS(Depth First Search)图的深度优先搜索#define MaxVerNum 100 /* 最大顶点数为*/typedef enum False,True boolean;#include “stdio.h“#include “stdlib.h“boolean visitedMaxVerNum;typedef struct node /* 表结点*/int adjvex;/* 邻接点域 ,一般是放顶点对应的序号或在表头向量中的下标*/char Info; /*与边(或弧)相关的信息*/struct node * next; /* 指向下一个邻接点的指针域 */ EdgeNo

2、de; typedef struct vnode /* 顶点结点*/ char vertex; /* 顶点域*/EdgeNode * firstedge; /* 边表头指针*/ VertexNode; typedef struct VertexNode adjlistMaxVerNum; /* 邻接表*/int n,e; /* 顶点数和边数*/ ALGraph; /* ALGraph 是以邻接表方式存储的图类型*/建立一个无向图的邻接表存储的算法如下:void CreateALGraph(ALGraph *G)/* 建立有向图的邻接表存储*/int i,j,k;int N,E;EdgeNode

3、 *p;printf(“请输入顶点数和边数: “);scanf(“%d %d“, printf(“n=%d,e=%dnn“,G-n,G-e);getchar();for(i=0;in;i+) /* 建立有 n 个顶点的顶点表*/printf(“请输入第%d 个顶点字符信息(共%d 个):“,i+1,G-n);scanf(“%c“, /* 读入顶点信息*/getchar();G-adjlisti.firstedge=NULL; /* 顶点的边表头指针设为空*/for(k=0;ke;k+) /* 建立边表*/printf(“请输入边 对应的顶点序号 (共%d 个):“,2*G-e);scanf(“

4、%d %d“,/* 读入边的顶点对应序号*/p=(EdgeNode *)malloc(sizeof(EdgeNode); / 生成新边表结点 p p-adjvex=j; /* 邻接点序号为 j */p-next=G-adjlisti.firstedge;/* 将结点 p 插入到顶点 Vi 的链表头部*/G-adjlisti.firstedge=p; printf(“n 图已成功创建!对应的邻接表如下:n“);for(i=0;in;i+)p=G-adjlisti.firstedge;printf(“%c-“,G-adjlisti.vertex);while(p!=NULL)printf(“ %c

5、 “,G-adjlistp-adjvex.vertex);p=p-next;printf(“n“);printf(“n“); /*CreateALGraph*/int FirstAdjVertex(ALGraph *g,int v)/找图 g 中与顶点 v 相邻的第一个顶点if(g-adjlistv.firstedge!=NULL) return (g-adjlistv.firstedge)-adjvex;else return 0;int NextAdjVertex(ALGraph *g ,int vi,int vj )/找图 g 中与 vi 相邻的,相对相邻顶点 vj 的下一个相邻顶点Ed

6、geNode *p;p=g-adjlistvi.firstedge;while( p!=NULL if(p!=NULL else return 0;void DFS(ALGraph *G,int v) /* 从第 v 个顶点出发深度优先遍历图 G */ int w;printf(“%c “,G-adjlistv.vertex);visitedv=True; /* 访问第 v 个顶点,并把访问标志置 True */for(w=FirstAdjVertex(G,v);w;w=NextAdjVertex(G,v,w)if (!visitedw) DFS(G,w); /* 对 v 尚未访问的邻接顶点 w 递归调用 DFS */void DFStraverse(ALGraph *G)/*深度优先遍历以邻接表表示的图 G,而以邻接矩阵表示时,算法完全相同*/ int i,v;for(v=0;vn;v+)visitedv=False;/*标志向量初始化*/for(i=0;in;i+)if(!visited0) DFS(G,0);/*DFS*/void main()ALGraph G;CreateALGraph(printf(“该无向图的深度优先搜索序列为:“);DFStraverse(printf(“nSuccess!n“);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报