77范文网 - 专业文章范例文档资料分享平台

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

来源:网络收集 时间:2019-02-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

/*【基本要求】

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

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

//_______无向图的邻接多重表存储表示p166____________________________________ const int NUM=20;

const int Data_Num=2;//每个顶点所表示的数据 typedef char VertexType[Data_Num];

/*

#define MAX_VERTEX_NUM 20 typedef struct emnu{int unvisited;int visited;} VisitIf;

typedef struct InfoType{}; typedef struct VertexType{}; */

typedef struct EBox{ int mark; //访问标记

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

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

typedef struct VexBox { VertexType data; EBox *firstedge; //指向第一条依附该顶点的边 }VexBox;

typedef struct{ VexBox adjmulist[NUM];

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

//_________________________队列的定义_____________________________________ typedef int QElemType; typedef struct QNode { QElemType data; struct QNode *next;

}QNode,*QueuePtr;

typedef struct { QueuePtr front,rear;

}LinkQueue;

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

int LocateVex(AMLGraph G,VertexType u) { int i; for(i=0;i<G.vexnum;i++) if(strcmp(u,G.adjmulist[i].data)==0) return i; return -1; }

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

int CreateGraph(AMLGraph &G) { cout<<"请输入图的顶点数: "; cin>>G.vexnum;//输入图当前的顶点数 cout<<"请输入图的弧数: "; cin>>G.edgenum;//输入图当前的边数 cout<<"请输入每个顶点所对应的值:"<<endl; for(int i=0;i<G.vexnum;i++) { cin>>G.adjmulist[i].data;//输入顶点值 G.adjmulist[i].firstedge=NULL;//初始化指针 } VertexType v1,v2; EBox *p; int j;//每条弧所关联的两个结点 for(int k=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; } return 1; }

//返回V的值

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

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

int FirstAdjVex(AMLGraph G,VertexType v) { int i; i=LocateVex(G,v); if(i<0) return -1; if(G.adjmulist[i].firstedge)//V有邻接结点 if(G.adjmulist[i].firstedge->ivex==i) return G.adjmulist[i].firstedge->jvex; else return G.adjmulist[i].firstedge->ivex; else return -1; }

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

int NextAdjVex(AMLGraph G,VertexType v,VertexType w)

int i,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; else if(p->jvex==i&&p->ivex!=j) p=p->jlink; else break; if(p&&p->ivex==i&&p->jvex==j) { p=p->ilink; if(p&&p->ivex==i) return p->jvex; else if(p&&p->jvex==i) return p->jvex; } if(p&&p->ivex==j&&p->jvex==i) { p=p->jlink; if(p&&p->ivex==i) return p->jvex; else if(p&&p->jvex==i) return p->jvex; } return -1;

//__________________________队列的操作_________________________________________

int visite[NUM];//访问标志数组 int (*VisitFunc)(VertexType v);

void DFS(AMLGraph G,int v) {

int j; 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; }

//________深度优先搜索_______________________________________________________ void DFSTraverse(AMLGraph G,int(*Visit)(VertexType)) { int v,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>=G.vexnum) { for(v=0;v<G.vexnum;v++) { if(!visite[v]) DFS(G,v); }//内层for }//if else { if(!visite[v]) DFS(G,v); }//else }//外层for cout<<"\b\b\b ";

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍在线全文阅读。

以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/471637.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: