电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C语言版图的深度和广度优先遍历源代码

C语言版图的深度和广度优先遍历源代码_第1页
1/6
C语言版图的深度和广度优先遍历源代码_第2页
2/6
C语言版图的深度和广度优先遍历源代码_第3页
3/6
邻接表表示的图: #include"stdio.h" #include"stdlib.h" #define MaxVertexNum 50 //定义最大顶点数 typedef struct node{ //边表结点 int adjvex; //邻接点域 struct node *next; //链域 }EdgeNode; typedef struct vnode{ //顶点表结点 char vertex; //顶点域 EdgeNode *firstedge; //边表头指针 }VertexNode; typedef VertexNode AdjList[MaxVertexNum]; //AdjList 是邻接表类型 typedef struct { AdjList adjlist; //邻接表 int n,e; //图中当前顶点数和边数 } ALGraph; //图类型 //=========建立图的邻接表======= void CreatALGraph(ALGraph *G) { int i,j,k; char a; EdgeNode *s; //定义边表结点 printf("Input VertexNum(n) and EdgesNum(e): "); scanf("%d,%d",&G->n,&G->e); //读入顶点数和边数 fflush(stdin); //清空内存缓冲 printf("Input Vertex string:"); for(i=0;in;i++) //建立边表 { scanf("%c",&a); G->adjlist[i].vertex=a; //读入顶点信息 G->adjlist[i].firstedge=NULL; //边表置为空表 } printf("Input edges,Creat Adjacency List\n"); for(k=0;ke;k++) { //建立边表 scanf("%d%d",&i,&j); //读入边(Vi,Vj)的顶点对序号 s=(EdgeNode *)malloc(sizeof(EdgeNode)); //生成边表结点 s->adjvex=j; //邻接点序号为 j s->next=G->adjlist[i].firstedge; G->adjlist[i].firstedge=s; //将新结点*S 插入顶点Vi 的边表头部 s=(EdgeNode *)malloc(sizeof(EdgeNode)); s->adjvex=i; //邻接点序号为i s->next=G->adjlist[j].firstedge; G->adjlist[j].firstedge=s; //将新结点*S 插入顶点Vj 的边表头部 } } //=========定义标志向量,为全局变量======= typedef enum{FALSE,TRUE} Boolean; Boolean visited[MaxVertexNum]; //========DFS:深度优先遍历的递归算法====== void DFSM(ALGraph *G,int i) {//以Vi 为出发点对邻接链表表示的图G 进行DFS 搜索 EdgeNode *p; printf("%c",G->adjlist[i].vertex); //访问顶点Vi visited[i]=TRUE; //标记Vi 已访问 p=G->adjlist[i].firstedge; //取Vi 边表的头指针 while(p) { //依次搜索Vi 的邻接点Vj,这里j=p->adjvex if(! visited[p->adjvex]) //若Vj 尚未被访问 DFSM(G,p->adjvex); //则以Vj 为出发点向纵深搜索 p=p-...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

C语言版图的深度和广度优先遍历源代码

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部