文章参考过网上的内容如有侵权请联系#includestdio.h#includestdlib.h#defineMAX_NUM 20typedefstructArcNode{intadjvex;//该弧指向的顶点的位置structArcNode*nextarc;//指向下一条弧的指针}ArcNode;typedefstructVNode{//顶点表结点intdata;//顶点信息ArcNode*firstarc;//指向第一条依附该点的弧的指针}VNode,AdjList[MAX_NUM];typedefstruct{AdjList vertices;intvexnum,arcnum;//图的当前顶点数和弧数}ALGraph;intCreateList(ALGraphG){inti0;printf(输入顶点数和弧数\n);scanf(%d%d,G.vexnum,G.arcnum);printf(输入顶点\n);for(i0;iG.vexnum;i){G.vertices[i].datai;//初始化顶点G.vertices[i].firstarcNULL;//顶点指针初始化}//构造顶点}voidGInsert(ALGraphG){ArcNode*p;inti,j,k;//printf(请输入各条边);for(k0;kG.arcnum;k){printf(请输入第%d条边\n,k1);scanf(%d%d,i,j);p(ArcNode*)malloc(sizeof(ArcNode));//生成j的表结点p-adjvexj;p-nextarcG.vertices[i].firstarc;//将结点j链接到i的单链表G.vertices[i].firstarcp;p(ArcNode*)malloc(sizeof(ArcNode));//生成i的表结点p-adjvexi;p-nextarcG.vertices[j].firstarc;//将结点i链接到j的单链表G.vertices[j].firstarcp;}}intvisit[MAX_NUM]{0};//用于判断顶点是否被访问voidDFSTraverse(ALGraphG,intv){//深度遍历printf(%d ,v);visit[v]1;//已访问标志ArcNode*pG.vertices[v].firstarc;while(p){if(!visit[p-adjvex])DFSTraverse(G,p-adjvex);pp-nextarc;}}voidBFSTraverse(ALGraphG,intv){intarear-1,afront-1,Q[MAX_NUM];printf(%d ,v);visit[v]1;//已访问标志Q[arear]v;while(arear!afront){vQ[afront];ArcNode*pG.vertices[v].firstarc;while(p){if(!visit[p-adjvex]){printf(%d ,p-adjvex);visit[p-adjvex]1;Q[arear]p-adjvex;}pp-nextarc;}}}intmain(){ALGraph G;CreateList(G);GInsert(G);DFSTraverse(G,1);printf(\n);BFSTraverse(G,1);}
数据结构实验(C语言):图的遍历
文章参考过网上的内容如有侵权请联系#includestdio.h#includestdlib.h#defineMAX_NUM 20typedefstructArcNode{intadjvex;//该弧指向的顶点的位置structArcNode*nextarc;//指向下一条弧的指针}ArcNode;typedefstructVNode{//顶点表结点intdata;//顶点信息ArcNode*firstarc;//指向第一条依附该点的弧的指针}VNode,AdjList[MAX_NUM];typedefstruct{AdjList vertices;intvexnum,arcnum;//图的当前顶点数和弧数}ALGraph;intCreateList(ALGraphG){inti0;printf(输入顶点数和弧数\n);scanf(%d%d,G.vexnum,G.arcnum);printf(输入顶点\n);for(i0;iG.vexnum;i){G.vertices[i].datai;//初始化顶点G.vertices[i].firstarcNULL;//顶点指针初始化}//构造顶点}voidGInsert(ALGraphG){ArcNode*p;inti,j,k;//printf(请输入各条边);for(k0;kG.arcnum;k){printf(请输入第%d条边\n,k1);scanf(%d%d,i,j);p(ArcNode*)malloc(sizeof(ArcNode));//生成j的表结点p-adjvexj;p-nextarcG.vertices[i].firstarc;//将结点j链接到i的单链表G.vertices[i].firstarcp;p(ArcNode*)malloc(sizeof(ArcNode));//生成i的表结点p-adjvexi;p-nextarcG.vertices[j].firstarc;//将结点i链接到j的单链表G.vertices[j].firstarcp;}}intvisit[MAX_NUM]{0};//用于判断顶点是否被访问voidDFSTraverse(ALGraphG,intv){//深度遍历printf(%d ,v);visit[v]1;//已访问标志ArcNode*pG.vertices[v].firstarc;while(p){if(!visit[p-adjvex])DFSTraverse(G,p-adjvex);pp-nextarc;}}voidBFSTraverse(ALGraphG,intv){intarear-1,afront-1,Q[MAX_NUM];printf(%d ,v);visit[v]1;//已访问标志Q[arear]v;while(arear!afront){vQ[afront];ArcNode*pG.vertices[v].firstarc;while(p){if(!visit[p-adjvex]){printf(%d ,p-adjvex);visit[p-adjvex]1;Q[arear]p-adjvex;}pp-nextarc;}}}intmain(){ALGraph G;CreateList(G);GInsert(G);DFSTraverse(G,1);printf(\n);BFSTraverse(G,1);}