代码如下:

#include <iostream>
#include <queue>
using namespace std;
typedef int VertexType;
typedef int EdgeType;
const int MaxVertexNum = 30;class MGraph
{public:MGraph(){CreatGraph();};void CreatGraph();void Visit(int v);void BFS(int v);void BFStraverse();void DFStraverse();bool Ispath_BFS(int i, int j);//判断结点i和结点j之间是否有路径bool Ispath_DFS(int i, int j);//判断结点i和结点j之间是否有路径void Init_vis();
private:void DFS(int i, int j, bool &flag);void dfs_graph(int i);VertexType vertexs[MaxVertexNum];EdgeType arcs[MaxVertexNum][MaxVertexNum];int vertexnum;int edgenum;bool vis[MaxVertexNum];
};void MGraph::CreatGraph()
{Init_vis();int a1, a2;cout << "请输入图的顶点个数和边的条数" << endl;cin >> vertexnum >> edgenum;cout << "请依次输入按序号0到n顶点的中存储的信息" << endl;for (int i = 0; i < vertexnum; i++) cin >> vertexs[i];for (int i = 0; i < vertexnum; i++)for (int j = 0; j < vertexnum; j++)arcs[i][j] = 0;cout << "请输入边的信息(该图以有向图的邻接矩阵存储方式存储)" << endl;for (int i = 0; i < edgenum; i++){cin >> a1 >> a2;arcs[a1][a2] = 1;//若加入arcs[a2][a1] = 1,则为无向图}
}void MGraph::Init_vis()
{for (int i = 0; i < MaxVertexNum; i++) vis[i] = false;
}void MGraph::Visit(int v)
{cout << vertexs[v] << " ";
}void MGraph::BFS(int v)
{queue<int >q;q.push(v);vis[v] = true;while (q.size()){int t = q.front();Visit(t);q.pop();for (int i = 0; i < vertexnum; i++){if (arcs[t][i] == 1 && vis[i] == false){vis[i] = true;q.push(i);}}}cout << endl;Init_vis();
}void MGraph::BFStraverse()
{queue<int >q;for (int i = 0; i < vertexnum; i++){if (vis[i] == false){vis[i] = true;q.push(i);while (q.size()){int t = q.front();Visit(t);q.pop();for (int j = 0; j < vertexnum; j++)if (arcs[t][j] == 1 && vis[j] == false){vis[j] = true;q.push(j);}}}}cout << endl;Init_vis();
}void MGraph::dfs_graph(int i)
{Visit(i);for (int j = 0; j < vertexnum; j++){if (arcs[i][j] == 1 && vis[j] == false){vis[j] = true;dfs_graph(j);}}
}void MGraph::DFStraverse()
{for (int i = 0; i < vertexnum; i++){if (vis[i] == false){vis[i] = true;dfs_graph(i);}}cout << endl;Init_vis();
}bool MGraph::Ispath_BFS(int i, int j)
{queue<int >q;vis[i] = true;q.push(i);while (q.size()){int t = q.front();q.pop();if (t == j){Init_vis();return true;}for (int k = 0; k < vertexnum; k++){if (arcs[t][k] == 1 && vis[k] == false){vis[k] = true;q.push(k);}}}Init_vis();return false;
}void MGraph::DFS(int i, int j, bool &flag)
{if (i == j){flag = true;return;}for (int k = 0; k < vertexnum; k++){if (arcs[i][k] == 1 && vis[k] == false){vis[k] = true;DFS(k, j, flag);vis[k] = false;}}
}bool MGraph::Ispath_DFS(int i, int j)
{bool flag = false;vis[i] = true;DFS(i, j, flag);Init_vis();if (flag) return true;else return false;
}int main()
{MGraph g;int v;cin >> v;g.BFS(v);g.BFStraverse();g.DFStraverse();int a,b, c;while (cin >> a >> b >> c, a){if (a == 1)if (g.Ispath_BFS(b, c)) cout << "bfs:" << b << " and " << c << "yes" << endl;else cout << "bfs:" << b << " and  " << c << "no" << endl;else if (a == 2)if (g.Ispath_DFS(b, c)) cout << "dfs:" << b << " and " << c << "yes" << endl;else cout << "dfs:" << b << " and " << c << "no" << endl;}return 0;
}

测试结果:

C++ class实现邻接矩阵存储的图(完整代码)相关推荐

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

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

  2. C++ class实现十字链表存储的图(完整代码)

    代码如下: #include <iostream> #include <queue> using namespace std; typedef int InfoType; ty ...

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

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

  4. HTML轮播图完整代码 (原生Javascript)

    HTML轮播图完整代码 (原生Javascript) <!DOCTYPE html> <html><head><meta charset="utf- ...

  5. JS原生实现简单的轮播图(完整代码,一看就懂)

    实现完后的效果图: 实现思路: 先实现能左右箭头点击能实现图片的更换,也就是五张图片先隐藏然后看一下当前要现在第几张就让它显示,其他四张隐藏. 需要注意的地方是当前图片是第一张或第五张的时候我们要加判 ...

  6. SpringBoot+Quartz+数据库存储(附完整代码和数据库脚本)

    目录 1.pom文件依赖 2.Druid连接池的Quartz扩展类 3 .application.yml文件 4 .修改quartz.properties配置 5 . 在数据库中创建quartz相关的 ...

  7. scrapy中集成selenium+浏览器池实现selenium的并发爬取LCSC网站中非结构化表格数据+异步存储进mysql+完整代码

    爬取https://lcsc.com/products/Connectors_365.html这个网址下所有的表格数据. 蓝色的都是要爬取的子页面,要爬取子页面里面的表格数据 ,表格数据如下: 右上角 ...

  8. C++实现邻接矩阵存储的图及dfs遍历

    #include <iostream> using namespace std; #define MaxInt 1e8 #define MVNum 100//最大顶点数 typedef c ...

  9. 原生js+css 实现轮播图 完整代码

    利用原生的js实现轮播图,可以添加到自己的UI库中,在以后的项目中对其进行修改然后添加到已有项目中. 先写出css部分和html部分,直接上代码 <!DOCTYPE html> <h ...

最新文章

  1. 一篇文章来告诉你可视化是多么重要
  2. 小程序 --- 项目小练手Ⅰ
  3. [NewLife.XCode]数据层缓存(网站性能翻10倍)
  4. nodejs解析apk
  5. java md5 utf-8_Jquery与java MD5加密不同
  6. 华为机试HJ91:走方格的方案数
  7. ‘nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  8. FOUND MODULE 所在的表及刪除不啟作用的INCLUDE
  9. Eclipse 跌落“神坛”,这款 IDE 后来居上!
  10. 人工智能+社交 csdn_关于AI和社交媒体虚假信息,我们需要尽快进行三大讨论
  11. 2021年40个最佳免费WordPress主题
  12. Python二级(07)——函数和代码复用
  13. Eclipse 下html语法高亮插件——HTML Editor
  14. 苹果经典提示音_微信提示音,可以更换成你喜欢的声音了!
  15. 书籍_《未来世界的幸存者》阮一峰--5/5
  16. 三阶矩阵的lu分解详细步骤_lu分解(笔算矩阵lu分解步骤)
  17. 地球经纬度java语言表示_java根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)-Go语言中文社区...
  18. Java中IO的快速复习(代码+注释)
  19. 读书笔记 - 《卧底经济学》
  20. 英国AI研究员揭开真相,中国人工智能为何能发展迅速?

热门文章

  1. ArcGIS 10.6字段计算器(Field Calculator)字段任意填充编码序列(奇数、偶数序列、自定义间隔)
  2. T-SQL编程基础之二:条件选择、循环编程
  3. C语言试题二十九之编写函数int function(int lim,int aa[max])求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。
  4. C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节
  5. Android之android studio如何把项目分享到github并提修改的代码到Github
  6. python赋值语句的一般格式为_[零基础学Python]赋值,简单也不简单
  7. oc引导windows蓝屏_跟电脑蓝屏say no!【亲测有效】
  8. 神奇的折纸艺术!无限翻转完全停不下来
  9. 为什么大部分男生比女生高?原因让你意想不到
  10. 数学除了摧残祖国的花朵外,竟然还可以赢钱!