以邻接多重表为存储结构实现连通无向图的深度优先和广度优先遍_第1页
以邻接多重表为存储结构实现连通无向图的深度优先和广度优先遍_第2页
以邻接多重表为存储结构实现连通无向图的深度优先和广度优先遍_第3页
以邻接多重表为存储结构实现连通无向图的深度优先和广度优先遍_第4页
以邻接多重表为存储结构实现连通无向图的深度优先和广度优先遍_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍/*

以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍历。

以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集*///________头文件___________________________________________________________#include<iostream>usingnamespacestd;

//_______无向图的邻接多重表存储表示p166____________________________________constintNUM=20;

constintData_Num=2;//每个顶点所表示的数据typedefcharVertexType[Data_Num];

/*

#defineMAX_VERTEX_NUM20typedefstructemnu{intunvisited;intvisited;}VisitIf;

typedefstructInfoType{};typedefstructVertexType{};*/

typedefstructEBox{intmark;//访问标记

intivex,jvex;//该边依附的2个顶点位置structEBox*ilink,*jlink;//分别指向依附这2个顶点的下一条边

//InfoType*info;//该边信息指针}EBox;

typedefstructVexBox{VertexTypedata;EBox*firstedge;//指向第一条依附该顶点的边}VexBox;

typedefstruct{VexBoxadjmulist[NUM];

intvexnum,edgenum;//无向图的当前顶点和边数}AMLGraph;

//_________________________队列的定义_____________________________________typedefintQElemType;typedefstructQNode{QElemTypedata;structQNode*next;

}QNode,*QueuePtr;

typedefstruct{QueuePtrfront,rear;

}LinkQueue;

//_____________________寻觅指定数据______________________________________________//寻觅输入的数据在图中的位置,若不存在则返回-1

intLocateVex(AMLGraphG,VertexTypeu){inti;for(i=0;i<G.vexnum;i++)if(strcmp(u,G.adjmulist[i].data)==0)returni;return-1;}

//________________________构造无向图_______________________________________________//采用邻接多重表存储表示,构造无向图G

intCreateGraph(AMLGraph&G){cout<<"请输入图的顶点数:";cin>>G.vexnum;//输入图当前的顶点数cout<<"请输入图的弧数:";cin>>G.edgenum;//输入图当前的边数cout<<"请输入每个顶点所对应的值:"<<endl;for(inti=0;i<G.vexnum;i++){cin>>G.adjmulist[i].data;//输入顶点值G.adjmulist[i].firstedge=NULL;//初始化指针}VertexTypev1,v2;EBox*p;intj;//每条弧所关联的两个结点for(intk=0;k<G.edgenum;k++){cout<<"请输入第"<<k+1<<"弧的始点和终点:";cin>>v1;cin>>v2;i=LocateVex(G,v1);j=LocateVex(G,v2);/

/确定v1和v2在图G中的位置p=(EBox*)malloc(sizeof(EBox));//对弧结点进行赋值(*p).mark=0;(*p).ivex=i;(*p).jvex=j;(*p).ilink=G.adjmulist[i].firstedge;(*p).jlink=G.adjmulist[j].firstedge;G.adjmulist[i].firstedge=G.adjmulist[j].firstedge=p;}return1;}

//返回V的值

VertexType*GetVex(AMLGraphG,intv){if(v>G.vexnum||v<0)exit(0);return&G.adjmulist[v].data;}

//返回V的第一个邻接点的序号,若没有则返回-1

intFirstAdjVex(AMLGraphG,VertexTypev){inti;i=LocateVex(G,v);if(i<0)return-1;if(G.adjmulist[i].firstedge)//V有邻接结点if(G.adjmulist[i].firstedge->ivex==i)returnG.adjmulist[i].firstedge->jvex;elsereturnG.adjmulist[i].firstedge->ivex;elsereturn-1;}

//返回V的(相对于W)的下一个邻接结点的序号,若W是V的最终一个邻接结点,则返回-1

intNextAdjVex(AMLGraphG,VertexTypev,VertexTypew)

inti,j;EBox*p;

i=LocateVex(G,v);j=LocateVex(G,w);if(i<0||j<0)return-1;

p=G.adjmulist[i].firstedge;while(p)if(p->ivex==i&&p->jvex!=j)p=p->ilink;elseif(p->jvex==i&&p->ivex!=j)p=p->jlink;elsebreak;if(p&&p->ivex==i&&p->jvex==j){p=p->ilink;if(p&&p->ivex==i)returnp->jvex;elseif(p&&p->jvex==i)returnp->jvex;}if(p&&p->ivex==j&&p->jvex==i){p=p->jlink;if(p&&p->ivex==i)returnp->jvex;elseif(p&&p->jvex==i)returnp->jvex;}return-1;

//__________________________队列的操作_________________________________________

intvisite[NUM];//访问标志数组int(*VisitFunc)(VertexTypev);

voidDFS(AMLGraphG,intv){

intj;EBox*p;

VisitFunc(G.adjmulist[v].data);visite[v]=1;//该顶点已经被访问p=G.adjmulist[v].firstedge;while(p){j=p->ivex==v?p->jvex:p->ivex;if(!visite[j])DFS(G,j);p=p->ivex==v?p->ilink:p->jlink;}

//________深度优先探寻_______________________________________________________voidDFSTraverse(AMLGraphG,int(*Visit)(VertexType)){intv,start;VisitFunc=Visit;for(v=0;v<G.vexnum;v++)visite[v]=0;cout<<"请输入你要开始进行查找的位置:";cin>>start;cout<<"按广深度优先探寻的结果是:"<<endl;for(v=start;v<G.vexnum;v++){if(v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论