博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
阅读量:4287 次
发布时间:2019-05-27

本文共 1616 字,大约阅读时间需要 5 分钟。

图的两种存储方式:邻接矩阵和邻接表;

两种遍历方式:深度优先和广度优先;

首先以一个结构体存储一个图:

struct MGraph{ int vertex[maxvertex];          //存顶点 int arc[maxvertex][maxvertex];  //存边(邻接矩阵) int vertexnum,arcnum;           //顶点数和边数};

其次是对图的初始化:

void CreatMGraph(MGraph *&G){ int i,j; cin1>>G->vertexnum>>G->arcnum;  //输入顶点数和边数 for(i=0;i
vertexnum;i++) //输入每个顶点的值 cin1>>G->vertex[i]; for(i=0;i
vertexnum;i++) //初始化邻接矩阵 for(j=0;j
vertexnum;j++) G->arc[i][j]=0; for(i=0;i
arcnum;i++) { int n,m,w; cin1>>n>>m>>w; //修改邻接矩阵中的值 G->arc[n][m]=w; G->arc[m][n]=w; }}

在此之前需要定义一个全局变量的visited数组:

int visited[maxvertex];   //标记已被访问过的顶点(全局变量)//广度优先遍历void BFS(MGraph *&G,int v){ queue
q; int x,j; if(!visited[v]) //即为visited[v]==0,也就是未被访问过 { cout<
vertex[v]<<" "; visited[v]=1; q.push(v); //被访问的顶点入队 } while(!q.empty()) //队不空进循环 { x=q.front(); //取队头元素 q.pop(); //队头出队 for(j=0;j
vertexnum;j++) if (G->arc[x][j]&&!visited[j]) { cout<
vertex[j]<<" "; visited[j]=1; //标记为访问过 q.push(j); //被访问的顶点继续入队 } }}//深度优先遍历void DFS(MGraph *&G,int v){nt j; if(!visited[v]) { cout<
vertex[v]<<" "; visited[v]=1; //标记为访问过 } for(j=0;j
vertexnum;j++) if (G->arc[v][j]&&!visited[j])//邻接矩阵的第(v,j)元素不为0 { //且未被访问过则递归 DFS(G,j); }}

此为图的邻接矩阵的输出函数:

void Print(MGraph *G){ int i,j; for(i=0;i
vertexnum;i++) { for(j=0;j
vertexnum;j++) cout<
arc[i][j]<<" "; cout<

main函数调用上面函数:

int main(){ MGraph *G=new MGraph; CreatMGraph(G); cout<<"输出邻接矩阵:"<

转载地址:http://gpxgi.baihongyu.com/

你可能感兴趣的文章
一起探索ThreadLock吧
查看>>
Redis 原理(一):线程IO模型
查看>>
iOS之---cocoaPods的使用详解------
查看>>
iOS之CALayer的使用和position和anchorPoint
查看>>
iOS 网络通信原理和socke通信原理/OSI七层模型
查看>>
iOS即时通信之XMPP框架的使用及原理简介
查看>>
PHP之Apache服务器搭建
查看>>
iOS webDav服务器的搭建
查看>>
iOS openfire服务器的使用
查看>>
iOS ------自动布局之Masonry的使用
查看>>
iOS. UICollectionViewController的使用详解,相册滚动偏移放大
查看>>
iOS之UITableViewController使用详解(一)tableview上移
查看>>
iOS之UIScrollView的使用详解
查看>>
MAC常用终端命令汇总
查看>>
iOS之tableView(五)的编辑删除插入操作和UIAlertController的使用
查看>>
iOS之tableView(四)自定义cell/注册cell的三种方式/设置预估高度、cell上图文混排实例
查看>>
iOS之tableView(三)cell复制粘贴操作
查看>>
iOS collectionView实现瀑布流
查看>>
iOS 控制器创建的三种方式
查看>>
iOS UIAlertView和UIAlertController的使用
查看>>