数据结构实验(C语言):图的遍历

📅 2026/7/28 17:03:07 👁️ 阅读次数 📝 编程学习
数据结构实验(C语言):图的遍历

文章参考过网上的内容,如有侵权,请联系

#include<stdio.h>#include<stdlib.h>#defineMAX_NUM 20typedefstructArcNode{intadjvex;//该弧指向的顶点的位置structArcNode*nextarc;//指向下一条弧的指针}ArcNode;typedefstructVNode{//顶点表结点intdata;//顶点信息ArcNode*firstarc;//指向第一条依附该点的弧的指针}VNode,AdjList[MAX_NUM];typedefstruct{AdjList vertices;intvexnum,arcnum;//图的当前顶点数和弧数}ALGraph;intCreateList(ALGraph&G){inti=0;printf("输入顶点数和弧数\n");scanf("%d%d",&G.vexnum,&G.arcnum);printf("输入顶点\n");for(i=0;i<G.vexnum;++i){G.vertices[i].data=i;//初始化顶点G.vertices[i].firstarc=NULL;//顶点指针初始化}//构造顶点}voidGInsert(ALGraph&G){ArcNode*p;inti,j,k;//printf("请输入各条边");for(k=0;k<G.arcnum;k++){printf("请输入第%d条边\n",k+1);scanf("%d%d",&i,&j);p=(ArcNode*)malloc(sizeof(ArcNode));//生成j的表结点p->adjvex=j;p->nextarc=G.vertices[i].firstarc;//将结点j链接到i的单链表G.vertices[i].firstarc=p;p=(ArcNode*)malloc(sizeof(ArcNode));//生成i的表结点p->adjvex=i;p->nextarc=G.vertices[j].firstarc;//将结点i链接到j的单链表G.vertices[j].firstarc=p;}}intvisit[MAX_NUM]={0};//用于判断顶点是否被访问voidDFSTraverse(ALGraph&G,intv){//深度遍历printf("%d ",v);visit[v]=1;//已访问标志ArcNode*p=G.vertices[v].firstarc;while(p){if(!visit[p->adjvex])DFSTraverse(G,p->adjvex);p=p->nextarc;}}voidBFSTraverse(ALGraph&G,intv){intarear=-1,afront=-1,Q[MAX_NUM];printf("%d ",v);visit[v]=1;//已访问标志Q[++arear]=v;while(arear!=afront){v=Q[++afront];ArcNode*p=G.vertices[v].firstarc;while(p){if(!visit[p->adjvex]){printf("%d ",p->adjvex);visit[p->adjvex]=1;Q[++arear]=p->adjvex;}p=p->nextarc;}}}intmain(){ALGraph G;CreateList(G);GInsert(G);DFSTraverse(G,1);printf("\n");BFSTraverse(G,1);}