C++实现邻接表存储的图及bfs遍历
#include <iostream>
#include <queue>
using namespace std;
typedef char VerTexType;
#define MVNum 100
typedef char OtherInfo;
bool vis[MVNum];//邻接表
typedef struct ArcNode {int adjvex;struct ArcNode *nextarc;OtherInfo info;
} ArcNode;//弧(边)typedef struct VNode {VerTexType data;ArcNode *firstarc;
} VNode, AdjList[MVNum];//顶点typedef struct {AdjList vertices;int vexnum, arcnum;
} ALGraph;//图int LocateVex(ALGraph G, int v) {//找点的下标for (int i = 0; i < G.vexnum; i++) {if (v == G.vertices[i].data)return i;}return -1;
}void CreateUDG(ALGraph &G) {//采用邻接表创建无向图cin >> G.vexnum >> G.arcnum;for (int i = 0; i < G.vexnum; i++) {cin >> G.vertices[i].data;G.vertices[i].firstarc = NULL;}int i, j;for (int k = 0; k < G.arcnum; k++) {VerTexType v1, v2;cin >> v1 >> v2;i = LocateVex(G, v1);j = LocateVex(G, v2);ArcNode *p1;//用头插法插入p1 = new ArcNode;p1->adjvex = j;p1->nextarc = G.vertices[i].firstarc;G.vertices[i].firstarc = p1;ArcNode *p2;p2 = new ArcNode;//如果是有向图,则不需要下面的代码p2->adjvex = i;p2->nextarc = G.vertices[j].firstarc;G.vertices[j].firstarc = p2;}
}void BFS(ALGraph G, int v) {//用bfs遍历cout << G.vertices[v].data;vis[v] = true;queue<int>q;q.push(v);while (q.size()) {ArcNode *t = G.vertices[q.front()].firstarc;q.pop();for (ArcNode *p = t; p; p = p->nextarc) {if (!vis[p->adjvex]) {vis[p->adjvex] = true;cout << G.vertices[p->adjvex].data;q.push(p->adjvex);}}}
}int main() {ALGraph G;CreateUDG(G);BFS(G, 0);return 0;
}
测试效果图:
测试结果:
C++实现邻接表存储的图及bfs遍历相关推荐
- 数据结构实践——操作用邻接表存储的图
本文是针对[数据结构基础系列(7):图]的实践. [项目 - 操作用邻接表存储的图] 假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大 ...
- 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
邻接表存储的图 - DFS /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visi ...
- 数据结构上机实践第11周项目2 - 操作用邻接表存储的图
操作用邻接表存储的图 本次实践将对用邻接表存储的图进行按要求操作,运用起所建立的图的算法库.本次实践所用到的算法库点击此处参考.(编译环境:VC++6.0) 本次实践的具体要求如下: 假设图G采用邻接 ...
- 第十一周项目实践2 用邻接表存储的图来实现基本应用
假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的一个顶点,输出该顶点编号: (3)计算图G中出度为0的顶点数: (4)判断图 ...
- 第十二周项目二----操作用邻接表存储的图
/*烟台大学计算机与控制工程学院 时间2015年12月14日 作者:孙潇 问题描述:假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的 ...
- C++ class实现邻接表存储的图(完整代码)
代码如下: #include <iostream> #include <queue>using namespace std; const int MaxVertexNum = ...
- [数据结构]邻接矩阵和邻接表存储的图DFS,BFS算法时间复杂度分析
- 邻接表存储图的广度优先遍历
试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是邻接表存储 ...
- 图的邻接矩阵存储和邻接表存储定义方法
一.邻接矩阵 #include <iostream> using namespace std; #define MaxVertexNum 100 //顶点最大数目//邻接矩阵存储结构 ty ...
最新文章
- php端口转发源码,Python实现TCP/IP协议下的端口转发及重定向示例
- Nat. Genet. | 基于遗传学主导的方法定义免疫相关性状的药物靶标
- 社交电商这条路,也许只有腾讯能走远
- qt开发环境 - 丑陋的串口助手
- 宏在使用过程余函数的区别1
- find()matlab,Matlab 之 find()函数
- 【1】推荐系统评测指标
- 二叉树——判断一棵树是否是平衡二叉树
- 【java】我工作三年了,该懂并发了!
- 手机mtkcdc端口如何开启_MTK驱动安装教程(手机黑屏刷机)
- cnpack转换dfm文件
- Mac谷歌浏览器无法下载的解决方案
- list tuple dirt set 的简单区分方法
- 如何给文件添加everyone权限
- win10 windows许可证即将过期的解决办法
- python学习——oop-python面向对象,类相关基础
- latex写论文(TeXstudio工具)
- 基于人体感应模块的驱鸟器设计
- gtest测试框架使用详解_【python】新手小白必看,教你如何使用全功能Python测试框架 - python秋枫...
- HDU 5976 Detachment 逆元