邻接矩阵的深度优先遍历.doc
上传人:sy****28 上传时间:2024-09-12 格式:DOC 页数:3 大小:14KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

邻接矩阵的深度优先遍历.doc

邻接矩阵的深度优先遍历.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<malloc.h>#include<iostream>usingnamespacestd;#defineINFINITY32767#defineMAX_VEX50#defineOK1#defineFALSE0#defineTRUE1#defineERROR-1bool*visited;//图的邻接矩阵存储结构typedefstruct{char*vexs;//动态分配空间存储顶点向量intarcs[MAX_VEX][MAX_VEX];//邻接矩阵intvexnum,arcnum;//图的当前定点数和弧数}Graph;//图G中查找顶点c的位置intLocateVex(GraphG,charc){for(inti=0;i<G.vexnum;++i){if(G.vexs[i]==c)returni;}returnERROR;}//创建无向网voidCreateUDN(Graph&G){//采用数组(邻接矩阵)表示法,构造无向图Gcout<<"请输入定点数和弧数:";cin>>G.vexnum>>G.arcnum;cout<<"请输入"<<G.vexnum<<"个顶点"<<endl;G.vexs=(char*)malloc((G.vexnum+1)*sizeof(char));//需要开辟多一个空间存储'\0'//构造顶点向量for(inti=0;i<G.vexnum;i++){cout<<"请输入第"<<i+1<<"个顶点:";cin>>G.vexs[i];}G.vexs[G.vexnum]='\0';//初始化邻接矩阵for(inti=0;i<G.vexnum;++i)for(intj=0;j<G.vexnum;j++)G.arcs[i][j]=INFINITY;cout<<"请输入"<<G.arcnum<<"条弧"<<endl;chara,b;ints1,s2;for(inti=0;i<G.arcnum;++i){cout<<"请输入第"<<i+1<<"条弧:";cin>>a>>b;s1=LocateVex(G,a);//找到a和b在顶点向量中的位置s2=LocateVex(G,b);}}//图G中顶点k的第一个邻接顶点intFirstVex(GraphG,intk){for(inti=0;i<G.vexnum;++i)if(G.arcs[k][i]!=INFINITY)returni;returnERROR;}//返回i(相对于j)的下一个邻接顶点intNextVex(GraphG,inti,intj){for(intk=j+1;k<G.vexnum;++k)if(G.arcs[i][k]!=INFINITY)returnk;returnERROR;}voidDFS(GraphG,intv){//从第v个顶点出发递归地深度优先遍历图Gvisited[v]=TRUE;cout<<G.vexs[v]<<"";for(intw=FirstVex(G,v);w>=0;w=NextVex(G,v,w))if(!visited[w])DFS(G,w);}//深度优先遍历voidDFSTraverse(GraphG,inti){for(intj=0;j<G.vexnum;++j){//初始化所有的顶点状态为未被访问visited[j]=FALSE;}//遍历结点for(;i<G.vexnum;++i)if(!visited[i])DFS(G,i);}//主函数intmain(){GraphG;CreateUDN(G);visited=(bool*)malloc(G.vexnum*sizeof(bool));cout<<endl<<"深度优先遍历:";DFSTraverse(G,0);cout<<endl;}