#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遍历相关推荐

  1. 数据结构实践——操作用邻接表存储的图

    本文是针对[数据结构基础系列(7):图]的实践. [项目 - 操作用邻接表存储的图] 假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大 ...

  2. 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)

    邻接表存储的图 - DFS /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visi ...

  3. 数据结构上机实践第11周项目2 - 操作用邻接表存储的图

    操作用邻接表存储的图 本次实践将对用邻接表存储的图进行按要求操作,运用起所建立的图的算法库.本次实践所用到的算法库点击此处参考.(编译环境:VC++6.0) 本次实践的具体要求如下: 假设图G采用邻接 ...

  4. 第十一周项目实践2 用邻接表存储的图来实现基本应用

    假设图G采用邻接表存储,分别设计实现以下要求的算法:  (1)输出出图G中每个顶点的出度:  (2)求出图G中出度最大的一个顶点,输出该顶点编号:  (3)计算图G中出度为0的顶点数:  (4)判断图 ...

  5. 第十二周项目二----操作用邻接表存储的图

    /*烟台大学计算机与控制工程学院 时间2015年12月14日 作者:孙潇 问题描述:假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的 ...

  6. C++ class实现邻接表存储的图(完整代码)

    代码如下: #include <iostream> #include <queue>using namespace std; const int MaxVertexNum = ...

  7. [数据结构]邻接矩阵和邻接表存储的图DFS,BFS算法时间复杂度分析

  8. 邻接表存储图的广度优先遍历

    试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ); 其中LGraph是邻接表存储 ...

  9. 图的邻接矩阵存储和邻接表存储定义方法

    一.邻接矩阵 #include <iostream> using namespace std; #define MaxVertexNum 100 //顶点最大数目//邻接矩阵存储结构 ty ...

最新文章

  1. php端口转发源码,Python实现TCP/IP协议下的端口转发及重定向示例
  2. Nat. Genet. | 基于遗传学主导的方法定义免疫相关性状的药物靶标
  3. 社交电商这条路,也许只有腾讯能走远
  4. qt开发环境 - 丑陋的串口助手
  5. 宏在使用过程余函数的区别1
  6. find()matlab,Matlab 之 find()函数
  7. 【1】推荐系统评测指标
  8. 二叉树——判断一棵树是否是平衡二叉树
  9. 【java】我工作三年了,该懂并发了!
  10. 手机mtkcdc端口如何开启_MTK驱动安装教程(手机黑屏刷机)
  11. cnpack转换dfm文件
  12. Mac谷歌浏览器无法下载的解决方案
  13. list tuple dirt set 的简单区分方法
  14. 如何给文件添加everyone权限
  15. win10 windows许可证即将过期的解决办法
  16. python学习——oop-python面向对象,类相关基础
  17. latex写论文(TeXstudio工具)
  18. 基于人体感应模块的驱鸟器设计
  19. gtest测试框架使用详解_【python】新手小白必看,教你如何使用全功能Python测试框架 - python秋枫...
  20. HDU 5976 Detachment 逆元

热门文章

  1. C和指针之字符串编程练习1
  2. LeetCode之Fizz Buzz
  3. linux之学习linux系统相关的书籍
  4. sublime mysql插件_开发者最常用的8款Sublime text 3插件
  5. DeepMind 的马尔可夫决策过程(MDP)课堂笔记
  6. 这8个中国天文台你肯定不认识!
  7. 天冷打字全靠抖?!桌面暖手宝,体验10s速热,温暖升级,冬天有TA就够了
  8. 这相册一出手,哪个长辈搞不定?
  9. 豆瓣最高评分8.1!万维钢:读懂这本书,你会比身边人更深的理解这个时代
  10. 我们该如何学习机器学习中的数学