基于邻接表的图的各种遍历
来源:互联网 发布:北京数据恢复培训 编辑:程序博客网 时间:2024/06/05 11:08
基于邻接表的图的各种遍历/** * *Coder: LinX 2017-7-13 - 2017-7-14 * *内容: 基于邻接表的图的各种遍历 * */ #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct ArcNode { int adj_vex; struct ArcNode *next_arc; }ArcNode; typedef struct { char data; ArcNode *first_arc; }VNode; typedef struct { VNode adjlist[MAXSIZE]; int vnums,enums; }AGraph; AGraph* createDG();//创建基于邻接表的有向图 void DFS(AGraph *G,int visit[],int startVT);//基于邻接表的图的深度优先遍历 void BFS(AGraph *G,int visit[],int startVT); //基于邻接表的图的广度优先遍历 int main() { int i,visit[MAXSIZE]; for(i=0;i<MAXSIZE;i++) { visit[i]=0; } AGraph *G=createDG(); DFS(G,visit,0); printf("\n"); for(i=0;i<MAXSIZE;i++) { visit[i]=0; } BFS(G,visit,0); return 0; } /*基于邻接表的图的深度优先遍历*/ void DFS(AGraph *G,int visit[],int startVT) { int curVT; ArcNode *p; p=G->adjlist[startVT].first_arc; printf("%c ",G->adjlist[startVT].data); visit[startVT]=1; while(p!=NULL){if(visit[p->adj_vex]==0){DFS(G,visit,p->adj_vex);}p=p->next_arc;} } /*基于邻接表的图的广度优先遍历*/ void BFS(AGraph *G,int visit[],int startVT) { int queue[MAXSIZE]; int front=0,rear=0,curVT; queue[++rear]=startVT; printf("%c ",G->adjlist[startVT].data); ArcNode *p; while(front!=rear) { front=(front+1)%MAXSIZE; curVT=queue[front]; p=G->adjlist[curVT].first_arc; while(p!=NULL) { if(visit[p->adj_vex]==0) { printf("%c ",G->adjlist[p->adj_vex].data); rear=(rear+1)%MAXSIZE; queue[rear]=p->adj_vex; visit[p->adj_vex]=1; } p=p->next_arc; } } } /*创建基于邻接表的有向图*/ AGraph* createDG() { int i=0,v1,v2; AGraph *G; ArcNode *s; char c; G=(AGraph *)malloc(sizeof(AGraph)); printf("请输入顶点的个数: "); scanf("%d",&G->vnums); printf("请输入边的条数: "); scanf("%d",&G->enums); for(i=0;i<G->vnums;i++) { G->adjlist[i].first_arc=NULL; } printf("输入顶点(#结尾): "); i=-1; while((c=getchar())!='#'){G->adjlist[i].data=c;i++;} printf("输入边信息(输入一对顶点的位置): "); for(i=0;i<G->enums;i++) { scanf("%d%d",&v1,&v2); s=(ArcNode *)malloc(sizeof(ArcNode)); s->next_arc=NULL; s->adj_vex=v2-1; //这里使用头插法 s->next_arc=G->adjlist[v1-1].first_arc; G->adjlist[v1-1].first_arc=s; } return G; }
阅读全文
1 0
- 基于邻接表的图的各种遍历
- 图基于邻接表的遍历
- 图的遍历(基于邻接表)
- 基于邻接表的深度优先遍历
- 基于邻接表的图的广度优先遍历算法
- 基于邻接表的图的广度遍历
- 图的广度优先遍历,基于邻接链表实现
- 邻接表的图遍历
- 图的邻接表遍历
- 基于邻接表的广度优先搜索遍历
- 基于邻接表的广度优先搜索遍历
- 图(邻接表存储)的遍历
- 邻接表实现图的遍历
- 图的邻接表及遍历
- 图的遍历(数组+邻接表)
- 图的邻接表创建以及遍历
- 邻接表实现图的储存,遍历
- 图的深度遍历-邻接表
- python if __name__=='__main__'教程及原理
- php中textarea文本框输入内容回车换行('\n')的处理方法
- Cocos2d-x 之贴图 Texture2D
- UE4 UMG 动画
- 集成测试单元测试.系统测试,的联系和区别
- 基于邻接表的图的各种遍历
- cf round424 A.Unimodal Array
- linux 启动流程图
- navicat cannot create file解决方法
- 语义分割--LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation
- shell脚本命令代换
- 笃行务实 布萌区块链选择数字资产作为区块链行业突破口
- 使用android studio进行ndk开发时如何定位crash错误
- (55)join:等待线程终止