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

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

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

cout<<endl; }

//队列的初始化

int InitQueue(LinkQueue *Q) { (*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode)); if(!(*Q).front) exit(0); (*Q).front->next=NULL; return 1;

//判断队列是否为空,为空则返回1,否则返回0

int QueueEmpty(LinkQueue Q) { if(Q.front==Q.rear) return 1; else return 0; }

//向队列中插入元素

int EnQueue(LinkQueue *Q,QElemType e) { QueuePtr p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(0); p->data=e; p->next=NULL; (*Q).rear->next=p; (*Q).rear=p; return 1; }

//若队列不为空,则删除对头元素,并返回1;否则返回 0

int DeQueue(LinkQueue *Q,QElemType *e) { QueuePtr p; if((*Q).front==(*Q).rear) return 0; p=(*Q).front->next; *e=p->data; (*Q).front->next=p->next;

if((*Q).rear==p) (*Q).rear=(*Q).front; free(p); return 1; }

/**

Boolean visited[MAX]; //访问标志数组 Status(*VisitFunc)(int v); //函数变量 void DFSTraverse(Graph G,Status(*Visit)(int v))

{ //对图G做深度优先遍历 VisitFunc=Visit //使用全局变量VisitFunc,使DFS不必设函数指针参数 for(v=0;v<G.vexnum;++v)visited[v]=FALSE; //访问标志数组初始化 for(v=0;v<G.vexnum;++v) if(!visited[v]) DFS(G,v); //对尚未访问的顶点调用DFS }

void DFS(Graph G,int v) { //从第V个顶点出发递归地深度优先遍历图G visited[v]=TRUE;VisitFunc(v);//访问第v个顶点 for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w) if(!visited[w]) DFS(G,w); } **/

//_________广度优先搜索_____________________________________________________ //广度优先非递归遍历图G

void BFSTraverse(AMLGraph G,int(*Visit)(VertexType)) { int u,v,w,start=0; VertexType w1,u1; LinkQueue Q; for(v=0;v<G.vexnum;v++) visite[v]=0; InitQueue(&Q); cout<<"请输入你要开始进行查找的位置:"; cin>>start; cout<<"按广度优先搜索的结果是:"<<endl; for(v=start;v<G.vexnum;v++)

{ if(!visite[v]) { visite[v]=1; Visit(G.adjmulist[v].data); EnQueue(&Q,v);//v入队列 while(!QueueEmpty(Q)) { DeQueue(&Q,&u); strcpy(u1,*GetVex(G,u)); for(w=FirstAdjVex(G,u1);w>=0;w=NextAdjVex(G,u1,strcpy(w1,*GetVex(G,w)))) if(!visite[w]) { visite[w]=1; Visit(G.adjmulist[w].data); EnQueue(&Q,w); } } } }//for InitQueue(&Q); for(v=0;v<start;v++) { if(!visite[v]) { visite[v]=1; Visit(G.adjmulist[v].data); EnQueue(&Q,v);//v入队列 while(!QueueEmpty(Q)) { DeQueue(&Q,&u); strcpy(u1,*GetVex(G,u)); for(w=FirstAdjVex(G,u1);w>=0;w=NextAdjVex(G,u1,strcpy(w1,*GetVex(G,w)))) if(!visite[w]) { visite[w]=1; Visit(G.adjmulist[w].data); EnQueue(&Q,w); } } }

}//for cout<<"\b\b\b "; cout<<endl; }

//把边的访问标记设置为0,即未被访问

void MarkUnVisited(AMLGraph G) { int i; EBox *p; for(i=0;i<G.vexnum;i++) { p=G.adjmulist[i].firstedge; while(p) { p->mark=0; if(p->ivex==i) p=p->ilink; else p=p->jlink; } } }

/**

void BFSTraverse(Graph G,Status(* visit)(int v)){

//按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited for(v=0;v<G.vexnum;++v) visited[v]=FALSE; InitQueue(Q) //置空的辅助队列Q for(v=0;v<G.vexnum;++V) if(!visited[v]){ //v尚未访问 visited[v]=TRUE;Visit(v); EnQueue(Q,v); //v入队列 while(!QueueEmpty(Q)){ DeQueue(Q,v); //对头元素出队并置为u for(w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w))

if(!Visited[w]){ //w为u的尚未访问的邻接顶点 Visited[w]=TRUE; Visit(w); EnQueue(Q,W); }//if }//while }//if

}//BFSTraverse **/

//显示构造的无向图(包括定点数、顶点、边数、边) void Display(AMLGraph G) {

int i; EBox *p; MarkUnVisited(G); cout<<G.vexnum<<"个顶点:"; for(i=0;i<G.vexnum;i++) cout<<G.adjmulist[i].data<<" "; cout<<"; "<<G.edgenum<<"条边:"<<endl; for(i=0;i<G.vexnum;i++) { p=G.adjmulist[i].firstedge; while(p) if(p->ivex==i) { if(!p->mark) { cout<<G.adjmulist[i].data<<"-->"<<G.adjmulist[p->jvex].data<<" "; p->mark=1;//已经被访问过了 } p=p->ilink; } else { if(!p->mark) { cout<<G.adjmulist[p->ivex].data<<"-->"<<G.adjmulist[i].data<<" "; p->mark=1;//已经被访问过了 } p=p->jlink; }

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

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